当使用无会话设计时,currentuser是什么



我在rails api中禁用了会话,例如config.skip_session_storage = [:http_auth, :token_auth]

"注销"api有意义吗?如果是这样的话,我怎么能得到current_user,因为下面的代码抛出current_user=nil错误或warden.authenticate失败。

# class Api::V1::SessionsController < Devise::SessionsController
def create
# create token
end
def destroy
# We don't need this because the user is authenticated by the token.
warden.authenticate!(:scope => resource_name, :store => false, :recall => "#{controller_path}#failure")
current_user.reset_authentication_token!
render :status => 200,
:json => { :success => true,
:info => t("devise.sessions.signed_out"),
:data => {} }
end

API没有状态,因为它不依赖浏览器缓存任何内容。通常,如果您想保护API的安全,您可以为每个用户提供某种访问令牌(通过呈现的html或直接在javascript中(请参阅gongem)),然后通过SSL操作API,要求每个调用都具有该访问令牌。

例如,您可以调用https://mysite.com/api/v1/users?token=...

然后基于该令牌获得current_user

或者,无论何时执行API调用,都可以在头中包含令牌。无论哪种方式,你都需要用SSL来保护它,这样路由请求的人(例如,伪造的Starbuck的wifi)就可以嗅探请求、获取令牌并自己使用。

最新更新