1

私はhttps://github.com/plataformatec/devise/wiki/OmniAuth:-Overviewを使用して Facebook 認証を機能させてきました。指示されたことはすべて実行しましたが、まだ機能しません。最初に Cookie オーバーフロー エラーが発生したので、グーグルで調べた後、以下のように omniauth_callbacks_controller.rb に except('extra') を追加しました

   session["devise.facebook_data"] = request.env["omniauth.auth"].except('extra')

これでエラーは解消されましたが、それでもユーザーはログインしません。実際、ユーザーが作成されるとは思いません(heroku rails cで確認)。

後ろに「sign_up# =」が追加されたURLが返されます。何が問題なのですか?

  user = User.create(name:auth.extra.raw_info.name,
                       provider:auth.provider,
                       uid:auth.uid,
                       email:auth.info.email,
                       username:auth.info.email,
                       password:Devise.friendly_token[0,20]

                       )

ユーザーモデルで使用しているため、「ユーザー名」を追加しましたが、編集/追加する必要がある可能性があるものは他に考えられないようです。

Rails 3.1.3、Ruby 1.9.3p194 (2012-04-20 リビジョン 35410) [x86_64-darwin11.4.1]

===============クイックアップデート ===========================

そのため、ユーザーを保存したようです-データベースで確認できます。ただし、それでもユーザーはログインせず、パスワードではなくユーザー名と電子メールしか知らないため、作成されたユーザーでログインできません。要するに、私は Facebook に情報を送ってもらい、それをデータベースに保存することはできましたが、ログイン画面にリダイレクトすることはできませんでした。

4

1 に答える 1

1

さて、私はこれを理解しました。

まず、次のように、(もちろん移行を生成した後) ユーザー モデルに "provider" と "uid" を attr_accessible として追加する必要がありました。

attr_accessible :password, :password_confirmation, :remember_me, :username, :email,
:bio, :website_blog, :company, :name, :image, :provider, :uid

次に、ApplicationController.rb で、after_sign_in_path_for(resource) メソッドを微調整する必要がありました。私はDeviseを使用していますが、サインイン後にユーザーを前のページにリダイレクトするように少し前に変更しましたが、Facebookが関与しているため、エラーが発生したと思います。そのため、以前のものをコメントアウトする必要があり、root_url だけを使用して、ユーザーをログインさせ、ホームページにリダイレクトすることができました。

def after_sign_in_path_for(resource)       
 sign_in_url = root_url
 #sign_in_url = url_for(:action => 'new', :controller => 'sessions', :only_path => false, :protocol => 'http')  

  #if (request.referer == sign_in_url)
  #  super
  #else
  #  request.referer
  #end
end

ここで、エラーを発生させずにユーザーを前のページにリダイレクトする方法を理解する必要があり、それは完璧です。

于 2012-06-29T05:19:49.397 に答える