RESTFUL認証にログアウトボタンを追加する
-
24-09-2019 - |
質問
RESTFUL 認証をインストールしましたが、すべてが正常に動作しているようです。サインアップしてログインできます。ログアウトできる唯一の方法は URL を入力することです http://localhost:3000/logout
ページにログアウト ボタンを追加するにはどうすればよいですか?members.rhtmlに追加してみました
<%= link_to "logout", :controller=> "sessions", :action=> "destroy" %>
session_controller.rbを参照していますが、エラーが発生します。行動:創造し、破壊し、そして新しくする」
何かご意見は?ありがとう
解決
あなたはルートファイルでなければならないのか?
タグを入れてみてください
map.log_out 'logout', :controller => 'sessions', :action => 'destroy'
あなたのルートの中に
それからちょうど
持っています<%= link_to "Sign out", log_out_url %>
リンクアウト記号のための
編集
そのあなたがルーティングを指定する方法にすべてダウンします。
あなたは、ルーティングにmap.log_outを持っていたので、その後、URL ます。http:// localhostを:3000 /ログアウト URLは、このでピックアップし、正しい行動にルーティングされます。
あなたがお持ちの場合:
<%= link_to "logout", :controller=> "sessions", :action=> "destroy" %>
// localhostを:3000 /セッションのこれはちょうど HTTPのあなたのためのリンクを生成します。しかし、それはルーティングに何もしません。あなたはまだ、正しいルートを指定する必要があります。
RailsはURLに破壊するアクションを追加しないことに注意してください。 は(それが作成されることはありませんます。http:// localhostを:3000 /セッション/ を破壊します)それはあなたがする作用を持っている場合は、DELETEのHTTP動詞とそれを送信されることを破壊することを想定しています。何らかの理由で、そのはかなり完璧ではない、それはDELETE動詞を送るにデフォルト設定も、実際にdoesntの。
これを行うには、それを強制することができます
<%= link_to "logout", {:controller=> "user_sessions", :action=> "destroy"}, :method => :delete%>
これは、まだ正確にもルートそれをあなたしない限り動作しません。あなたが入れた場合のルートに次のように:
map.resource :session
その後、レールは、すべての動詞のルーティングを生成し、DELETEを含め、それらのデフォルトのアクションを指定します。 の外部から Railsのルーティング:詳しい情報はここで見つけることができますます。
あなたが本当にそれを理解するまで、はそのページ全体を読み何度も価値があります。ルーティングが理解Railsのための鍵です!
セッションのような単純なコントローラの場合、それだけでlog_out_url ..
にlog_outルートと、リンクを指定することが容易です (理にかなっている希望、睡眠不足がに忍び寄るさ!)
他のヒント
使用している場合 工夫する そしてあなたの懸念しているモデルは ユーザー, 、エレガントな方法は次のとおりです。
<%= link_to 'logout', destroy_user_session_path, method: :delete %>
これは次の理由で機能します。
- HTTP メソッドは GET、POST、PUT、PATCH、DELETE であるため、
method: :delete
(ないmethod: :destroy
) - 私たちが使っている
destroy_user_session_path
と 工夫する そして ユーザー 他のモデル名を定義した場合は、通常どおりモデルを作成します。 マネージャー ログアウトパスを変更するだけですdestroy_manager_session_path