2

devise および devise_token_auth gem を使用する Rails 4 アプリがあります。Rails アプリで通常どおり html リクエストに devise を使用し、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: application_controller に 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 内では、ユーザーはサインインしたままで、すべてのページをナビゲートできます。ユーザーがネイティブ クライアントからサインアウトすると、アクセス トークンは破棄され、ユーザーはサーバー セッションからもサインアウトされます。

4

0 に答える 0