0

railscast(http://railscasts.com/episodes/235-omniauth-part-1)をフォローした後、rails3アプリでdeviseとomniauthを使用しています。

ログインできます。データベースで、sign_in_count列がインクリメントされていることがわかります。

ただし、user_signed_in?常にfalseをcurrent_user?返し、 。を返す場合no method error

この問題はrails.jsが原因であるという他の回答を見たことがありますが、私はrails.jsを使用していません。

私のコントローラーは

    def create
        omn​​iauth = request.env ["omniauth.auth"]

        authentication = Authentication.find_by_provider_and_uid(omniauth ['provider']、omniauth ['uid'])
        認証の場合
            sign_in_and_redirect(:user、authentication.user)

        elsif current_user
            current_user.authentications.create!(:provider => omniauth ['provider']、:uid => omniauth ['uid'])
            redirect_to root_url
        そうしないと
            user = User.new
            user.apply_omniauth(omniauth)
            user.save(:validate => false)の場合
                sign_in(:user、user)

                redirect_to root_url
            そうしないと
                flash [:notice]="アカウントの作成中にエラーが発生しました"
                redirect_to root_url
            終わり
        終わり


    終わり
4

1 に答える 1

1

私はここに足を踏み入れて、2歳のRailscastは少し古いかもしれないと言います。質問とコメントの両方からのいくつかのこと。まず、Deviseのモジュールを含める必要があり:omniauthableます。そうしないと、機能しません。はい、それ以降はルートが一致しません/auth/facebook。これは、それがどこにあるかを伝える必要があるためです。

最初に、これを設定することについてのDeviseWikiへの書き込みを示します。次に、少しプラグインして、DeviseでのGoogleOAuthの使用に関する最近のブログ投稿を紹介します。最後に、一般的なDevise Wikiへのリンクと、Deviseであらゆる種類のすばらしいことを行う方法に関する50近くの記事があるという事実を残しておきます。これらはコミュニティによって更新され、通常は頻繁に更新されるため、最新の方法が含まれている必要があります。

于 2012-09-01T14:37:11.797 に答える