2011-07-20 8 views
5

私のアプリケーションはゲストユーザーアカウントを自動作成します。問題は、ゲストユーザーが実際のアカウントにサインインしたいということです。w Devise、SignInユーザーに別のユーザーとしてサインインする方法

私はすでにサインインしているユーザーにサインインしてもらいたいのですか?考案によると。私は、フォームをレンダリングすることができますが、私がサインインフォームを送信する場合

、リダイレクトにキック、それを考案:

Started POST "https://stackoverflow.com/users/sign_in" for 127.0.0.1 at 2011-07-19 18:21:45 -0700 
    Processing by Devise::SessionsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"RE/xxx=", "user"=>{"email"=>"[email protected]", "password"=>"[FILTERED]", "remember_me"=>"1"}, "commit"=>"Sign In"} 
    User Load (0.6ms) SELECT "users".* FROM "users" WHERE "users"."id" = 102 LIMIT 1 
Redirected to http://localhost:3000/ 
Completed 302 Found in 266ms 

更新

私が試した:

class SessionsController < Devise::SessionsController 

    def create 
    Rails.logger.info 'XXXXX 2' 
    super 
    Rails.logger.info 'XXXXX 4' 
    end 

end 

しかし、その方法に遭遇し、ログファイルがログファイルに入っていないうちに、要求が蹴飛ばされているように見える

sign_inしたユーザーのログインを許可する方法について教えてください。

+0

ログインページはどのようにレンダリングできましたか?私の場合、「あなたはすでにサインインしています」と言います。私が/ users/sign_inにアクセスしようとすると、 – lulalala

+0

私の答えが正しいと思うなら、それを正しいものとしてマークしてください! –

答えて

0

あなたは2つの操作を行うことができます。最初のユーザーはサインアウトし、別のユーザーが新しいサービスを開始する2番目のユーザーにリダイレクトします。

+0

そうだけど、def作成にアクセスできない。それが呼び出されていない – AnApprentice

+0

あなたは問題を解決するチャンスを持っていましたか? – Anatoly

3

アカウントを自動的に作成すると、current_{resource}はユーザーを返すでしょうか?そうであれば、sign_inとsign_upのルートからあなたをリダイレクトします(ソースコードが表示されている場合はprepend_before_filter :require_no_authentication)。

これはリダイレクトを説明するためのものです...問題を解決して、コントローラを拡張して、ゲスト以外のユーザーにのみ必要な認証を使用してbeforeフィルタを作成する必要があるようになりました。

はこれに注意してください:

https://github.com/plataformatec/devise/blob/master/app/controllers/devise_controller.rb

では、ユーザーが認証されているかどうかの検査よりも少し多くを行いrequire_no_authenticationの定義は、そこにあります。

P.S.:ので、ちょうどGUEST_USERS

例えば

用フィルタの前に別のものを追加しましたどこでも{resource}はあなたのモデルクラスの名前です。ユーザーが次にユーザーの場合、プロファイルがプロファイルの場合、ダウンケーシングに注意してください。ご登録のコントローラは、例のように呼び出された場合、リソースがユーザー

ある場合

Class {resource} 
    def is_guest? 
    # here you put the code that distinguishes a guest user which should return true if its one> 
    end 
end 

もroutesファイルを変更する必要があります:あなたのモデルに

class RegistrationsController < Devise::RegistrationsController 
    before_filter :require_no_authentication, :unless => :guest_user?, :only => [:new,:create, :cancel] 
    before_filter :require_no_authentication_for_guests, :if => :guest_user?, :only => [:new,:create, :cancel] 

    private 

    def guest_user? 
    current_{resource}.is_guest? 
    end 

    def require_no_authentication_for_guests 
    assert_is_devise_resource! 
    end 
end 

devise_for :users, :controllers => {:sessions => "sessions", 
            :registrations => "registrations"} 

次に、セッションコントローラで同じ操作を行います。これは、カスタムセッションコントローラーのフィルターの前に同じものを適用するという意味です。

以前のフィルタを適用して要件を事前に検討したい場合は注意してください。

助けてくれましたか?

+0

ありがとうございますが、カスタムRegistrationsControllerがリクエスト中に使用されていないようです。 – lulalala

+0

あなたはどうやってその結論に達しましたか?あなたはデバッガを使いましたか?しかし、申し訳ありませんが、カスタムコントローラを使用するようにルートを設定する必要があることを忘れていました。私は答えを修正します –

+0

また、あなたがそれをテストするために取ったステップを教えてください、そして、デバッガを使用する場合、起こるように思われる! –

関連する問題