Advertisement
Guest User

Untitled

a guest
Oct 31st, 2014
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.83 KB | None | 0 0
  1. protect_from_forgery with: :null_session, if: Proc.new { |c| c.request.format == 'application/json' }
  2.  
  3. class ApplicationController < ActionController::Base
  4.  
  5. before_filter :authenticate_user_from_token!
  6. protect_from_forgery with: :null_session, if: Proc.new { |c| c.request.format == 'application/json' }
  7.  
  8. private
  9.  
  10. def authenticate_user_from_token!
  11.  
  12. authenticate_with_http_token do |token, options|
  13. user_email = options[:user_email].presence
  14. user = user_email && User.find_by_email(user_email)
  15.  
  16. if user && Devise.secure_compare(user.authentication_token, token)
  17. sign_in user, store: false
  18. end
  19. end
  20. end
  21. end
  22.  
  23. class SessionsController < Devise::SessionsController
  24. #skip_before_action :verify_authenticity_token, :only => :create
  25. respond_to :json, :html
  26.  
  27. def create
  28.  
  29. self.resource = warden.authenticate!(auth_options)
  30.  
  31. if sign_in(resource_name, resource)
  32.  
  33. respond_to do |format|
  34. format.html { super }
  35. format.json do
  36. data = {
  37. auth_token: self.resource.authentication_token,
  38. email: self.resource.email,
  39. id: self.resource.id
  40. }
  41. render json: data, status: 201
  42. end
  43. end
  44.  
  45. else
  46. render json: {errors: self.resource.errors}, :status => 422
  47. end
  48. end
  49. end
  50.  
  51. class Api::CsrfController < ApplicationController
  52.  
  53. def index
  54. logger.info("csrf controller token: #{form_authenticity_token}")
  55. render json: { request_forgery_protection_token => form_authenticity_token }.to_json
  56. end
  57. end
  58.  
  59. export default Ember.Object.extend({
  60. fetchToken: function() {
  61. var _this = this;
  62. return Ember.$.ajax({
  63. url: 'api/csrf'
  64. }).done( function(data) {
  65. var param = Object.keys(data)[0];
  66. console.log('param key name:', param);
  67. _this.set('token', data);
  68. _this.set('param', param);
  69. },this.setPrefilter.bind(this) );
  70.  
  71. },
  72.  
  73. setPrefilter: function() {
  74. var token = this.get('token').authenticity_token;
  75. var preFilter = function(options, originalOptions, jqXHR) {
  76. return jqXHR.setRequestHeader('X-CSRF-Token', token );
  77. };
  78. Ember.$.ajaxPrefilter(preFilter);
  79. }
  80.  
  81. });
  82.  
  83. export function initialize(container, application) {
  84. application.inject('route', 'csrfService', 'service:csrf');
  85. application.inject('controller', 'csrfService', 'service:csrf');
  86. }
  87.  
  88. export default {
  89. name: 'csrf-service',
  90. initialize: initialize
  91. };
  92.  
  93. import Ember from 'ember';
  94. export default Ember.Route.extend({
  95. beforeModel: function(){
  96. return this.csrfService.fetchToken();
  97. }
  98. });
  99.  
  100. <form {{action 'loginUser' on='submit'}}>
  101. {{input type="text" value=email placeholder='email'}}
  102. {{input type='password' value=password placeholder='password'}}
  103. {{input name="authenticity_token" type="hidden" value=csrfService.token.authenticity_token }}
  104. <button type='submit'> Login </button>
  105. </form>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement