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="✓" /><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="✓" /><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
回答1件
あなたの回答
tips
プレビュー