このアプリのgithub
前提・実現したいこと
今deviseを用いないでSNSログインにチャレンジしてるのですが、下記のようなエラーが出ます
発生している問題・エラーメッセージ
該当のソースコード
config/initializer/omniauth.rb
ruby
1Rails.application.config.middleware.use OmniAuth::Builder do 2 provider :google_oauth2, ENV['GOOGLE_CLIENT_ID'], ENV['GOOGLE_CLIENT_SECRET'] 3 provider :facebook, ENV['FACEBOOK_CLIENT_ID'], ENV['FACEBOOK_CLIENT_SECRET'] 4end
自分では、rails側に環境変数を読み込ませる記述が間違ってると思ってますが正しい書き方が分かりません
https://qiita.com/julia817/items/7908c01984a291b74966
この記事を参考にこのように書きました。
この記事もdeviseを用いないでSNS認証をしていたので、、、。
Usage
Here's an example for adding the middleware to a Rails app in config/initializers/omniauth.rb:
Rails.application.config.middleware.use OmniAuth::Builder do provider :google_oauth2, ENV['GOOGLE_CLIENT_ID'], ENV['GOOGLE_CLIENT_SECRET'] end
You can now access the OmniAuth Google OAuth2 URL: /auth/google_oauth2
For more examples please check out examples/omni_auth.rb
NOTE: While developing your application, if you change the scope in the initializer you will need to restart your app server. Remember that either the 'email' or 'profile' scope is required!
と公式githubにも載ってたので書き方はあってる、、、?
sessons_controller
ruby
1 2 3 def create 4 auth = request.env['omniauth.auth'] 5 # binding.pry 6 if auth.present? 7 user = User.find_or_create_from_auth(request.env['omniauth.auth']) 8 session[:user_id] = user.id 9 redirect_back_or user 10 else 11 user = User.find_by(email: params[:session][:email].downcase) 12 # 受け取ったemailからfind_byでデータベースに 13 # 問い合わせてユーザー取得 14 if user && user.authenticate(params[:session][:password]) 15 # まずそのユーザーがいるかnilガード 16 # いたらpasswordとauthenticateかける 17 log_in user 18 params[:session][:remember_me] == '1' ? remember(user) : forget(user) 19 # check boxがonの時は1になるので1の時は 20 # ? 以降がtrueの処理 21 # : 以降がfalseの処理 22 redirect_back_or user 23 # redirect_back_or メソッド呼び出し 24 # 引数にuser_url(user)を渡す 25 else 26 flash.now[:danger] = 'invalid email/password combination' 27 render 'new' 28 end 29 end 30 end 31
elseに処理がいってしまいます。
binding.pry(デバッガーツール)で
authと入力したところ、当然nilでした。
試したこと
rails cで環境変数は出力されました
rb
1 2Rails.application.config.middleware.use OmniAuth::Builder do |config| 3 config.omniauth :facebook,ENV['FACEBOOK_CLIENT_ID'],ENV['FACEBOOK_CLIENT_SECRET'] 4 config.omniauth :google_oauth2,ENV['GOOGLE_CLIENT_ID'],ENV['GOOGLE_CLIENT_SECRET'] 5end
このように記述したがエラー文変わらず。
また
ruby
1Rails.application.config.middleware.use OmniAuth::Builder do 2 provider :google_oauth2, ENV['GOOGLE_CLIENT_ID'], ENV['GOOGLE_CLIENT_SECRET'], 3 { 4 scope: 'userinfo.email, userinfo.profile, http://gdata.youtube.com', 5 prompt: 'none', 6 image_aspect_ratio: 'square', 7 image_size: 50 8 } 9 #provider :facebook, ENV['FACEBOOK_CLIENT_ID'], ENV['FACEBOOK_CLIENT_SECRET'] 10end
githubに載ってるように記述してみてもエラーは変わらなかったです。
auth = request.env['omniauth.auth']
の中身はnilでした
。
問題は どうやってauth = request.env['omniauth.auth']の中身を入れるかという問題です。
環境変数はすでに設定したので、rails側でその環境変数を読み込ませることが問題だと考えてます。
また環境変数を読み込ませれば、auth = request.env['omniauth.auth']を実行したら
{ "provider" => "google_oauth2" 、 "uid" => "100000000000000000000" 、 "info" => { "name" => "John Smith" 、 "email" => "john@example.com" 、 "first_name " => " John " 、 " last_name " => " Smith " 、 " image " => " https://lh4.googleusercontent.com/photo.jpg " 、 " urls " => { " google " => "https://plus.google.com/+JohnSmith" } } 、
このように読み込めると考えてるのですが、それだけでは不十分でしょうか?
deviseを用いてないでSNS認証してる方がいればgithubを拝見させていただければ幸いです。
また他にもいい記事があったら教えてくださると幸いです。
あなたの回答
tips
プレビュー