2014-11-21 88 views
0

我使用的设计令牌认证跟我的移动应用程序,我的会话控制器具有这样的创建方法:无法登录后,自定义设计会话控制器

def create 
    logger.info "........#{current_user}" 
    warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#failure") 
    logger.info "authenticate user #{resource_name.inspect}" 
    render :status => 200, :json => current_user 
    end 

它,当我登录的用户帐户工作,但如果我再尝试验证帐户B,在创建函数总是返回我账户A的细节,还当检查当前用户,则返回帐户A.

我想知道如何

warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#failure") 

的作品,因为它没有真正看看params变量,它具有登录细节?

任何想法?

回答

0

如果您的目标是通过令牌登录您的移动应用程序用户,那么您不应该修改标准会话行为。 相反,尝试实现一个ApiController(延伸ApplicationController),该过滤器前插入一个登录用户

class ApiController < ApplicationController 
    prepend_before_action :authenticate_user_from_token! # sign_in user using the token 

    private 
    def authenticate_user_from_token! 
    ## Retrieve token in some way, usually from headers ## 
    User.find_by_token(token) 
    sign_in user, store: false ## this is the magic method from devise 
    end 
end 

当然,我考虑到你还滤波器之前在ApplicationController运行标准的色器件authenticate_user!作为。 为您的应用程序提供API的所有控制器都应扩展此控制器,您可以在其中正常使用current_user变量。