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

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

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

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

1回答

1836閲覧

Rails APIモードでGoogle Authを実現したい(rails api)

yamady

総合スコア176

Ruby on Rails

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2018/09/25 10:06

編集2018/09/29 09:29

いつもお世話になっております。

Ruby on Rails APIモードにて、Google認証を実装したいと考えているのですがエラーで苦戦しております。

OmniAuth::Strategies::OAuth2::CallbackError csrf_detected | CSRF detected

このエラーは、Googleのログイン画面に飛んでからログインしようとすると生じてしまいます。

開発環境

rails 5.2.1
omniauth-google-oauth2
(deviseは使っていません)

ソースコードは下記となります

omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do provider :google_oauth2, Rails.application.credentials.google[:google_client_id], Rails.application.credentials.google[:google_client_secret] end

user.rb

class User < ApplicationRecord def self.from_omniauth(auth) where(provider: auth.provider, uid: auth.uid).first_or_initialize.tap do |user| user.provider = auth.provider user.uid = auth.uid user.name = auth.info.name user.email = auth.info.email user.image = auth.info.image user.oauth_token = auth.credentials.token user.oauth_expires_at = Time.at(auth.credentials.expires_at) return user end end end

sessions_controller.rb

class SessionsController < ApplicationController def new end def create @user = User.from_omniauth(request.env["omniauth.auth"]) if @user.save session[:user_id] = user.id render json: "succesfully login.\n", status: 200 else render json: "fail to login.\n", status: 500 end end def destroy session[:user_id] = nil render json: "succesfully logout.\n", status: 200 end end

application.rb

・・・ config.api_only = true config.middleware.use ActionDispatch::Flash config.middleware.use ActionDispatch::Cookies config.middleware.use ActionDispatch::Session::CookieStore config.middleware.insert_before 0, Rack::Cors do allow do origins 'http://localhost:3000' resource '*', :headers => :any, :methods => [:get, :post, :patch, :delete, :options] end end end end

routes.rb

Rails.application.routes.draw do get 'auth/:provider/callback', to: 'sessions#create' get 'auth/failure', to: redirect('/') get 'signout', to: 'sessions#destroy', as: 'signout' resources :sessions, only: [:new, :create, :destroy] end

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

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

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

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

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

guest

回答1

0

自己解決

Ruby

1# config/omniauth.rb 2 3Rails.application.config.middleware.use OmniAuth::Builder do 4 provider :google_oauth2, 5 Rails.application.credentials.google[:google_client_id], 6 Rails.application.credentials.google[:google_client_secret], 7 8 # 下記を追加 9 {:provider_ignores_state => true} 10end

上記で解決しました。

投稿2018/09/29 10:11

yamady

総合スコア176

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問