我尝试访问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
})
}
)
}
})
答案 0 :(得分:0)
固定!
删除ApplicationController中的protect_from_forgery
。
我已将其设置为null_session,它以某种方式从Devise设置中删除cookie和/或current_user。