我有一个使用devise和devise_token_auth宝石的rails 4应用程序。我希望我的rails应用程序通常用于html请求的设计,并使用devise_token_auth来检索访问令牌。所有上述工作都很好。
现在,从我的REST客户端,我想使用access_token标头来检索html根页面。
在我的application_controller中,如果我添加以下行:
include DeviseTokenAuth::Concerns::SetUserByToken
来自RESTClient的主页请求设置了访问令牌标头,并将用户重定向到登录页面。但是,当我尝试在浏览器中登录并通过设计注册时,无论我在哪里使用user_signed_in,都会出错?和其他设计方法。
如果我从application_controller中删除上述行,所有具有常规登录和注册的浏览器调用都可以正常工作(使用相关重定向),但我无法通过设置access_token标头从REST客户端获取主页。
这是根控制器代码:
def index
if user_signed_in?
redirect_to logged_in_path
end
end
以下是请求和回复:
Url: http://10.0.1.15:3000
Method: GET
Request Headers:
Access-Token: aaaaaaaaaaa
Token-Type: Bearer
Client: bbbbbbbbbbbb
Expiry: 1234567
Uid: foo@bar.com
Response: 200 Ok
<Redirected to member home page>
Error where user_signed_in? is called
Url: http://10.0.1.15:3000
Method: GET
Request Headers:
Access-Token: aaaaaaaaaaa
Token-Type: Bearer
Client: bbbbbbbbbbbb
Expiry: 1234567
Uid: foo@bar.com
Response: 200 Ok
<NO REDIRECT to member home page> (user_signed_in? in the index action returns false)
<Can login, gets redirected to logged in page>
如何从常规浏览器和REST客户端使用该网站?
实际的目标是拥有一个Android客户端应用程序(而不是REST客户端,一旦解决了这个问题),用户从本机代码登录,输入电子邮件和密码,以及成功返回访问令牌,切换到显示WebView的活动,该活动使用登录的用户加载会话。在WebView中,用户保持登录状态并可以浏览所有页面。如果用户从本机客户端注销,那么访问令牌将被丢弃,用户也将从服务器会话中注销。