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

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

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

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

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Ruby on Rails

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

Q&A

解決済

1回答

1193閲覧

OAuthによるログイン時に追加パラメータをPOSTしたい

pecchan

総合スコア592

Ruby on Rails 6

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

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Ruby on Rails

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

0グッド

0クリップ

投稿2021/10/10 04:02

編集2021/10/10 21:32

rails6.1

Rails+omniauth-google-oauth2でGoogleログイン(devise無し)
こちらを参考にソーシャルログイン機能を実装しました。

参考先は以下のようになっており、GET送信をPOSTに変えて送信してます。

ruby

1 <%= link_to "Googleでログイン", "/auth/google_oauth2", method: :post %>

これに、リメンバー・ミー機能(ログインしたままにする)のvalueを一緒にPOST送信したいのですが方法が分からずにいます。

link_to から、form_forに変えたのですがcontroller側でデバッグしてもパラメータが渡って来てませんでした。

分かる方教えていただけると幸いです。
宜しくお願い致します。

ruby

1<div class="content content-bgcolor"> 2 <div class="content__inner-1col"> 3 <div class="form__inner"> 4 <h2 class="lv2-h">ログイン</h2> 5 </div> 6 7 <%= form_for(:sns, url: "/auth/google_oauth2") do |f| %> 8 <%= f.submit "Googleでログイン", class: "btn btn-primary btn-block" %> 9 <label> 10 <%= f.check_box :remember_me, class: "chk" %> 11 <span class="chk-text fs14">ログインしたままにする</span> 12 </label> 13 <% end %> 14 15 <%= form_for(:session, url: login_path) do |f| %> 16 17 <div class="form__inner"> 18 <%= f.label :email , "メールアドレス", class: "label label-default fs14", for: "login-mail" %> 19 <%= f.email_field :email, class: 'input-text', id: "login-mail" %> 20 </div> 21 <div class="form__inner"> 22 <%= f.label :password, "パスワード", class: "label label-default fs14", for: "login-password" %> 23 <%= link_to "(パスワードを忘れた場合はこちら)", new_password_reset_path, class: "link fs12" %> 24 <div class="toggle-password"> 25 <%= f.password_field :password, class: 'input-text', id: "login-password" %> 26 <i class="toggle-password-i fa fa-eye-slash"></i> 27 </div> 28 <label> 29 <%= f.check_box :remember_me, class: "chk" %> 30 <span class="chk-text fs14">ログインしたままにする</span> 31 </label> 32 </div> 33 <div class="form__inner"> 34 <%= f.submit "ログイン", class: "btn btn-primary btn-block" %> 35 <br> 36 <div style="text-align: center; padding-top: 20px;"> 37 <p class="fs12" >会員登録はお済みですか? <%= link_to "会員登録はこちら", signup_path, class: "link" %><p> 38 </div> 39 </div> 40 <% end %> 41 </div> 42 <!-- content__inner-1col --> 43</div> 44<!-- content content-bgcolor --> 45 46<%= javascript_pack_tag 'common/toggle-password' %>

###同日追加
展開されたHTMLを追記致します。

html

1<!-- コンテンツ --> 2 <div class="content content-bgcolor"> 3 <div class="content__inner-1col"> 4 <div class="form__inner"> 5 <h2 class="lv2-h">ログイン</h2> 6 </div> 7 8 <form action="/auth/google_oauth2" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="&#x2713;" /><input type="hidden" name="authenticity_token" value="3SJaySs6hbnnBTIxJL8zHPjINBg7xQIc0eYD+aOQn2j0VIe7GuBv+vm0aOnAXEjdJfJCl+0kerHfRa6/xUVmmw==" /> 9 <input type="submit" name="commit" value="Googleでログイン" class="btn btn-primary btn-block" data-disable-with="Googleでログイン" /> 10 <label> 11 <input name="sns[remember_me]" type="hidden" value="0" /><input class="chk" type="checkbox" value="1" name="sns[remember_me]" id="sns_remember_me" /> 12 <span class="chk-text fs14">ログインしたままにする</span> 13 </label> 14</form> 15 <form action="/login" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="&#x2713;" /><input type="hidden" name="authenticity_token" value="kDmpn6Rj0nndDQbdmgP1ZCOVxNnOmKVtMAuQJ7VMqgCgx72qItpNt7yyIC7QZEWrdN+pBNzRa2E+4CHKgnFexA==" /> 16 17 <div class="form__inner"> 18 <label class="label label-default fs14" for="login-mail">メールアドレス</label> 19 <input class="input-text" id="login-mail" type="email" name="session[email]" /> 20 </div> 21 <div class="form__inner"> 22 <label class="label label-default fs14" for="login-password">パスワード</label> 23 <a class="link fs12" href="/password_resets/new">(パスワードを忘れた場合はこちら)</a> 24 <div class="toggle-password"> 25 <input class="input-text" id="login-password" type="password" name="session[password]" /> 26 <i class="toggle-password-i fa fa-eye-slash"></i> 27 </div> 28 <label> 29 <input name="session[remember_me]" type="hidden" value="0" /><input class="chk" type="checkbox" value="1" name="session[remember_me]" id="session_remember_me" /> 30 <span class="chk-text fs14">ログインしたままにする</span> 31 </label> 32 </div> 33 <div class="form__inner"> 34 <input type="submit" name="commit" value="ログイン" class="btn btn-primary btn-block" data-disable-with="ログイン" /> 35 <br> 36 <div style="text-align: center; padding-top: 20px;"> 37 <p class="fs12" >会員登録はお済みですか? <a class="link" href="/signup">会員登録はこちら</a><p> 38 </div> 39 </div> 40</form> </div> 41 <!-- content__inner-1col --> 42</div> 43<!-- content content-bgcolor --> 44

###同日さらに追加

ちょっと分かったので追記です。
合っているか分かりませんが、ソーシャルログイン時のPOST送信は、googleプロバイダにPOSTして返ってきた値をcontrollerへ返しているようです。
そのため、viewからの値が渡らないのかもしれません。

勘違いしてたらご指摘いただけると幸いです。

config\routes.rb

ruby

1get 'auth/:provider/callback', to: 'sessions#create_from_SNS'

ログ

Started POST "/auth/google_oauth2" for ::1 at 2021-10-10 21:54:02 +0900 D, [2021-10-10T21:54:02.072597 #3346] DEBUG -- omniauth: (google_oauth2) Request phase initiated. Started GET "/auth/google_oauth2/callback?state=b33b81d94be&code=4%2F0AX4XfWga4pb05TboJwU6AFSqUOTdzrJSnS1rzXnW1JCcs5WMhIOwdJtYOL_Qascope=email+profile+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile+openid&authuser=2&prompt=consent" for ::1 at 2021-10-10 21:55:06 +0900 D, [2021-10-10T21:55:06.115749 #3346] DEBUG -- omniauth: (google_oauth2) Callback phase initiated. Processing by SessionsController#create_from_SNS as HTML Parameters: {"state"=>"b33b81d947b10fe981255947c5fb7d127dd65cbe", "code"=>"4/0AX4XfWga4pb05TboJwU6AFSqUOTJCcs5WMhIOwdJtYOL_Qa6x8MaTMIQ", "scope"=>"email profile https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile openid", "authuser"=>"2", "prompt"=>"consent", "provider"=>"google_oauth2"} User Load (0.9ms) SELECT "users".* FROM "users" WHERE "users"."email" = ? LIMIT ? [["email", "test@gmail.com"], ["LIMIT", 1]] From: /home/rails_user/xxxx/app/controllers/sessions_controller.rb:42 SessionsController#login:

###翌日追加
controllerが抜けてたので追記

app\controllers\sessions_controller.rb

ruby

1 2class SessionsController < ApplicationController 3 def new 4 end 5 6 def create 7 # メールアドレスによるログイン 8 # 省略 9 end 10 11 def destroy 12 log_out if logged_in? 13 redirect_to root_url 14 end 15 16 def create_from_SNS 17 if (user = User.find_or_create_from_auth_hash(auth_hash)) 18 log_in(user) 19 binding.pry 20 redirect_back_or mypage_path 21 end 22 end 23 24 private 25 def auth_hash 26 request.env['omniauth.auth'] 27 end 28end

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

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

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

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

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

winterboum

2021/10/10 04:39

checkを入れないときはparamsに入ってきませんが、そういうことではない?
pecchan

2021/10/10 08:03

有難う御座います。 チェック入れてもnilでした。 例えば params[:sns]やparams[:sns][:remember_me]はいずれもnilでした。 他の、プロバイダからの値、 例えば params[:state] なんかは値が渡って来てます。
winterboum

2021/10/10 09:46

はて、、、、 <%= f.check_box :remember_me, class: "chk" %> のところ html にはどう展開されてます?
pecchan

2021/10/10 11:17

有難う御座います。 展開されたhtml追記致しました。 自分には特に問題点が分かりません・・・。
winterboum

2021/10/10 15:01

そういえばController載ってないですね
pecchan

2021/10/10 21:28

あ!記載漏れすみません。追記致します。
guest

回答1

0

自己解決

その後色んなサイトを参考にしました。

ソーシャルログイン時は、自動的に内部で「ログイン状態を保持する」し、画面からのチェックは行わないのが一般的なようですね。

これに習うとparamsをpostする必要はなくなります。
このように変更します。

お騒がせしました。有難う御座いました。

投稿2021/10/13 23:57

pecchan

総合スコア592

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問