[開発環境]
cloud9, rails5.1.6
自分なりに、他の人の記事も調べつつ実装してるつもりなんですが、
自分のアプリのfacebook認証リンクタグから接続しても
facebookに接続すらもできずに、リダイレクトされてしまいます。
何が間違えているのかも分かりません。他の記事を参考にするしか方法がありません。
どなたかご教授御願い致します。また追加で必要な内容が有りましたら、お申し付けください。
下記の写真では、割と新しい記事を参考にした所どなたも
URIの語尾に/users/auth/facebook/callbackを足していました。
下記2枚は必要になるかわからないですが、一応貼りつけておきます。黒塗りの部分が記入済の部分になります。
routes.rbは変更済です。
devise_for :users, controllers: { omniauth_callbacks: 'users/omniauth_callbacks', registrations: 'users/registrations', sessions: 'users/sessions', passwords: 'users/passwords' }
user.rbの設定で、気になったのが
ストロングパラメータにuidとproviderも追加しないとダメなのかと思い、追加してみましたがダメでした。
[user.rb] devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable, :omniauthable def self.find_for_oauth(auth) user = User.where(provider: auth.provider, uid: auth.uid).first unless user user = User.create( provider: auth.provider, uid: auth.uid, email: auth.info.email, password: Devise.friendly_token[0, 20] ) end user end [application_controler.rb] class ApplicationController < ActionController::Base protect_from_forgery with: :exception before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters added_attrs = [ :email, :username, :password, :password_confirmation, :avatar, :avatar_cache, :remove_avatar ] devise_parameter_sanitizer.permit :sign_up, keys: added_attrs devise_parameter_sanitizer.permit :account_update, keys: added_attrs devise_parameter_sanitizer.permit :sign_in, keys: added_attrs end end
下記がOmniauthCallbacksControllerになります。
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController def facebook callback_from :facebook end private def callback_from(provider) provider = provider.to_s @user = User.find_for_oauth(request.env['omniauth.auth']) if @user.persisted? flash[:notice] = I18n.t('devise.omniauth_callbacks.success', kind: provider.capitalize) sign_in_and_redirect @user, event: :authentication else session["devise.#{provider}_data"] = request.env['omniauth.auth'] redirect_to new_user_registration_url end end end
linkタグは下記の様になっております。
<%= link_to "#{OmniAuth::Utils.camelize(provider)}アカウントでログイン", omniauth_authorize_path(resource_name, provider) %><br />
config/initializers/devise.rbではgem 'dotenv-rails'を使い、.envファイルを作成し、
その中で、FACEBOOK_IDとFACEBOOK_SECRET_KEYを格納しています。
.envファイルはgitignoreに入れています。何かご不明点があればお申し付けください。
config.omniauth :facebook, ENV['FACEBOOK_ID'], ENV['FACEBOOK_SECRET_KEY']
因みに、cloud9でfacebook認証を実行しようとすると、URLの末尾が次のようになります。
→ users/sign_up#=
こちらは何を表しているのでしょうか? →→ #=
あなたの回答
tips
プレビュー