0

devise_invitableドキュメントにアクセスするためのゲスト アカウントを作成するために使用しています。ドキュメントにアクセスする際、ゲストはアップグレード ボタンをクリックしてフル アカウントにアップグレードできます。アップグレード ボタンをクリックすると、devise_invitable招待が承認されます。

以前は機能していた: もう機能していません。

環境:

  • rails 4.2.3 (最近アップグレード)
  • 工夫 3.4.1
  • devise_invitable 1.3.6

アップグレード リンクを生成するゲスト ユーザー用のヘッダー パーシャルを使用します。

<% @invite_link = accept_user_invitation_url(invitation_token: @invite_token) %>
<%= link_to "Upgrade", @invite_link, class: "btn btn-danger btn-lg" %>

@invite_token次のように作成されます。

user = current_user
user.invite! do |u|
  u.skip_invitation = true
end
@invite_token = user.raw_invitation_token

したがって、link_toヘルパーは次のようなものを生成します。https://myapp/users/invitation/accept?invitation_token=vv_JqeFDLfyX65tx2KhR

リンクをクリックする場合を除いて、次のように表示されます。https://myapp/users/sign_in

エラーメッセージあり:The invitation token provided is not valid!

ログは次のように報告します。

Started GET "/users/invitation/accept?invitation_token=vv_JqeFDLfyX65tx2KhR" for 31.15.32.222 at 2015-10-15 19:18:34 +1100
Processing by Devise::InvitationsController#edit as HTML
  Parameters: {"invitation_token"=>"vv_JqeFDLfyX65tx2KhR"}
  User Load (5.9ms)  SELECT  "users".* FROM "users" WHERE "users"."invitation_token" = $1  ORDER BY "users"."id" ASC LIMIT 1  [["invitation_token", "ea9be9890c684e13ece13ec02f89bade81fcd3ac1fb982db72d8f8561d0cf289"]]
Redirected to https://myapp/
Filter chain halted as :resource_from_invitation_token rendered or redirected
Completed 302 Found in 53ms (ActiveRecord: 5.9ms)
Started GET "/" for 31.15.32.222 at 2015-10-15 19:49:52 +1100
Processing by PagesController#index as HTML
Redirected to https://myapp/users/sign_in
Completed 302 Found in 11ms (ActiveRecord: 0.0ms)

Railsコンソールを介してこれを機能させることができます。

Rails コンソールを並行して実行すると、上記の手順を実行して、期待どおりに機能する accept_invitation リンクを生成できます (つまり、ユーザーに完全なアカウントのパスワードを設定するように求めます)。

注意: raw_invitation_tokenRails コンソール セッションでは異なります。

私は何が欠けていますか?

4

1 に答える 1

0

ページが表示されたときと、accept_invitation リンクが生成された後user.invite!に生成するために呼び出されるコードを見つけました。これは、accept_invitation リンクのトークンが古くなったことを意味します。raw_invitation_token

コンソールを経由すると、コントローラー、ビュー、または JavaScript コンポーネントが呼び出されないため、このコードは呼び出されませんでした。そのため、コンソールを使用すると、期待どおりに機能しました。

修正され、すべて正常に戻りました。

于 2015-10-15T12:22:00.583 に答える