没有使用DeviseTokenAuth和Ionic

时间:2015-11-12 01:41:14

标签: ruby-on-rails devise ionic

我尝试访问API中的Devise :authenticate_user!方法。我已经关注了Devise Token Auth gem,但在使用json通过Ionic访问时,我无法访问API控制器中的current_user变量/辅助方法。

User.rb型号:

class User < ActiveRecord::Base
include DeviseInvitable::Inviter
devise :database_authenticatable, :recoverable, :rememberable,
     :trackable, :validatable, :omniauthable, :timeoutable,
     :invitable, :invite_for => 2.weeks
include DeviseTokenAuth::Concerns::User

application.rb中

class Application < Rails::Application
config.middleware.insert_before 0, "Rack::Cors" do
  allow do
    origins "*"
    resource "*",
      headers: :any,
      expose: ['access-token', 'expiry', 'token-type', 'uid', 'client'],
      methods: [:get, :put, :post, :delete, :options]
  end
end

Api控制器:

module Api
  class MobileController < ApplicationController
    include DeviseTokenAuth::Concerns::SetUserByToken
    respond_to :json
    before_filter :authenticate_user!

    def facility_contacts
      @facility = current_user.facility
    end
  end
end

设计用户:: SessionsController

class User::SessionsController < Devise::SessionsController
  include DeviseTokenAuth::Concerns::SetUserByToken

  respond_to :json, :html

  def create
    sign_out(:user) if current_user
    self.resource = warden.authenticate!(auth_options)
    set_flash_message(:notice, :signed_in) if is_flashing_format?
    sign_in(resource_name, resource)
    yield resource if block_given?
    respond_with resource, location: after_sign_in_path_for(resource)
  end
end

离子应用服务和控制器:

.factory('UserSession', function($resource) {
  return $resource("http://localhost:3000/users/sign_in.json")
})

.controller('LoginCtrl', function($scope, $location, UserSession, $ionicPopup, $rootScope) {
  $scope.data = {}
  $scope.login = function() {
  var user_session = new UserSession({ user: $scope.data })
  user_session.$save(
    function(data) {
      window.localStorage['userId'] = data.id
      window.localStorage['userName'] = data.name
      $location.path('/tab/daily_updates')
    },
    function(err) {
      var error = err['data']['error'] || err.data.join('.')
      var confirmPopup = $ionicPopup.alert({
        title: 'An error occured',
        template: error
      })
    }
  )
}
})

1 个答案:

答案 0 :(得分:0)

固定!

删除ApplicationController中的protect_from_forgery

我已将其设置为null_session,它以某种方式从Devise设置中删除cookie和/或current_user。