2014-11-21 64 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變量。