2

我有一个使用 devise 和 devise_token_auth gem 的 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 客户端获取主页。

这是根控制器代码:

home_controller.rb

def index
  if user_signed_in?
     redirect_to logged_in_path
  end
end

以下是请求和响应:

1:应用程序控制器中存在 SetUserByToken 行

1.1 来自 RESTClient:

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>

1.2 来自网页

Error where user_signed_in? is called

2:在 application_controller 中使用 SetUserByToken 行未设置

2.1 来自 RESTClient:

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)

2.2 从网页

<Can login, gets redirected to logged in page>

如何让网站在常规浏览器和 REST 客户端中都能正常工作?

实际目标是拥有一个 android 客户端应用程序(而不是 REST 客户端,一旦解决此问题),用户通过输入电子邮件和密码从本机代码登录,如果成功返回访问令牌,则切换到显示 WebView 的活动,该 WebView 加载与用户登录的会话。在 WebView 中,用户保持登录状态并可以浏览所有页面。如果用户从本机客户端注销,则访问令牌将被丢弃,并且用户也会从服务器会话中注销。

4

0 回答 0