質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

SNS

SNS(ソーシャル・ネットワーキング・サービス)は、 人と人とのつながりを促進したり、サポートしたりすることが可能なコミュニティ型のWebサービスです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

0回答

1315閲覧

SNS認証でdeviseを用いないでSNS認証したいが環境変数を読み込めてるか不安

divclass123

総合スコア35

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

SNS

SNS(ソーシャル・ネットワーキング・サービス)は、 人と人とのつながりを促進したり、サポートしたりすることが可能なコミュニティ型のWebサービスです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/12/24 17:53

編集2020/12/26 07:26

このアプリの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にも載ってたので書き方はあってる、、、?

公式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を拝見させていただければ幸いです。
また他にもいい記事があったら教えてくださると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

neko_daisuki

2020/12/25 08:23

環境変数ではなくべた書きするとどうなりますか? provider :google_oauth2, "GOOGLE_CLIENT_IDを書く", "GOOGLE_CLIENT_SECRETを書く" これで通れば環境変数が読み込まれてない。 通らなかったら環境変数の読み込み以外にも問題がある。 また、環境変数が読み込まれてるかは $ bin/rails c して ENV と打てば確認できると思います。
divclass123

2020/12/26 07:25

rails cで環境変数が出力されてました、、!
divclass123

2020/12/26 07:26

ご回答ありがとうございます、一旦ベタばりでやってみます!
divclass123

2020/12/27 08:34

ベタばりでもエラー変わらずでした、、、。ご協力していただき本当にありがとうございます! またよろしくお願いします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問