web-dev-qa-db-ja.com

deviseとは異なる別のコントローラーからdeviseのdevisesign_inメソッドとsign_outメソッドを呼び出す方法は?

Ruby on Rails 3.0.7アプリケーションとdeviseを使用したユーザー認証がありますが、代替のsign upsign inメソッド、ユーザーがFacebookアカウントを使用してサインアップできるようにし、そのログイン情報を、デバイスがユーザーの登録とログインに使用するのと同じusersテーブルに保存します。

ステップ

  1. ✔ユーザーがFacebookボタンをクリックします。
  2. ✔私は彼の情報(Koalaから抽出した名前と電子メール)を保存します。ユーザーに一般的なパスワードを与えます。
  3. ☐この新しいユーザーにdeviseでログインします。
  4. ✔メインコントローラーにリダイレクトします。

current_userヘルパーとuser_signed_in?ヘルパーも使い続けたいので、3番目のステップがありません。

では、他のコントローラーからこのユーザーに自動的にサインインするようにdeviseに指示するにはどうすればよいですか?

この質問でそのようなものを見ました デバイス:複数のコントローラーにユーザーセッションを処理させる そしてそれは私のユーザーをログインさせますが、空白のページに私を導きます...

14
Mr_Nizzle

Deviseは ヘルパーの束 を提供します。そのうちの2つは次のとおりです。

sign_in(resource_or_scope, *args)
sign_in_and_redirect(resource_or_scope, *args)

これらはどのコントローラーからでも使用できます。

[〜#〜]編集[〜#〜]

sign_inの使用はすでに機能しているが、ユーザーが空白のページのままになっている場合は、ログファイルをチェックして、リダイレクトが行われているかどうか、およびリダイレクト先を確認してください。または、上記の2番目のヘルパーを使用してリダイレクトを明示的にします。

22
Thilo

コントローラーにDeviseヘルパーを含め、通常のすべてのdeviseメソッドを含めます。 sign_inまたはsign_outは自動的にそこで利用可能になります。

class TestController < RocketPants::Base
  include Devise::Controllers::Helpers

幸い、コントローラーがApplicationControllerを拡張する場合、Deviseはこれらのヘルパーを便利なメソッドとして自動的に含めます。

ただし、RockePantsリポジトリは、コントローラーがApplicationControllerを拡張しない特定のケースを説明しているため、この明示的なinclude Devise::Controllers::Helpersが必要です https://github.com/filtersquad/rocket_pants/issues/7

また、公式のDeviseドキュメントは、ヘルパーを含めることで使用できる他のメソッドを見つけるのに役立ちます http://rubydoc.info/github/plataformatec/devise/master/Devise/Controllers/Helpers

1