新手问题 devise 的 current_user 小问题

cassiuschen · 2014年03月22日 · 最后由 cassiuschen 回复于 2014年03月22日 · 2357 次阅读

用 Devise + Omniauth 在做 SSO,大部分代码抄自sso-devise-omniauth-provider,但是有个问题出现在 Auth#user 之前的 action——Devise 的:authenticate_user!方法……

class AuthController < ApplicationController
  before_action :authenticate_user!, :except => [:access_token]
  skip_before_action :verify_authenticity_token, :only => [:access_token]

  ... ...

  def user
    hash = {
      :provider => 'bdfzer',
      :id => current_user.id.to_s,
      :info => {
         :email      => current_user.email,
      },
      :extra => {
         :name => current_user.name,
         :pku_id => current_user.pku_id
      }
    }

    render :json => hash.to_json
  end

  ... ...

end

每次 GET 这个 Auth#user 的时候 devise 都会抛出说未登录,去掉 before_action 之后说 current_user 是 NilClass 对象,显然问题出在 current_user 上……

问题是在 user 方法被调用之前还调用了很多方法,都能查到 current_user,唯独 user 这里出问题,不知道问题是怎么发生的……

BTW 在 devise 源码中为啥找不到authenticate_user这部分的源码>~<而且一直有这个疑问 current_user 不是个局部变量么?devise 怎么做到在各处调用它的呢?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册