分享

[Rails] Google OAuth 使用Devise 4.7.1 遇到 error : Not found. Authentication passthru

[Rails] Google OAuth 使用Devise 4.7.1 遇到 error : Not found. Authentication passthru
林班尼
10 hours ago·5 min read
在建立第三方開放授權 登入及註冊帳號 使用 devise 時發現
按登入都是出現以下圖 顯示 Not found. Authentication passthru.
原因可devise 4.7.2 伴隨著 omniauth 升級成2.0.1
導致按下連結後一直不會轉頁至登入畫面

我的環境版本如下

Rails 6.0.3.4
ruby 2.6.5p114
devise (4.7.1)
omniauth (2.0.1, 1.9.0)
omniauth-google-oauth2 (0.8.1, 0.8.0)
omniauth-rails_csrf_protection (1.0.0)
照慣例安裝完 devise 若要加入地方套件可以到https://github.com/zquestz/omniauth-google-oauth2
參考
gem 'omniauth-google-oauth2'
bundle install
接著在 config/initializers/omniauth.rb 檔案中添加
config.omniauth :google_oauth2, 'GOOGLE_CLIENT_ID', 'GOOGLE_CLIENT_SECRET', {}

在這裡可以使用 figaro

https://github.com/laserlemon/figaro
把從google api console 中取得的

GOOGLE_CLIENT_ID

GOOGLE_CLIENT_SECRET
建立成環境變數
config.omniauth :google_oauth2, ENV[‘GOOGLE_CLIENT_ID’], ENV[‘GOOGLE_CLIENT_SECRET’], {}
然後在 ‘config/routes.rb’檔案中添加
devise_for :users, controllers: { omniauth_callbacks: 'users/omniauth_callbacks' }
接著 /app/models/user.rb 添加
devise :omniauthable, omniauth_providers: [:google_oauth2]
大概是長這樣
這時會在登入頁面出現Sign in with GoogleOauth2 的連結
然後到 app/controllers/ 下建立檔案夾 users
並且建立omniauth_callbacks_controller.rb的檔案
路徑會是:app/controllers/users/omniauth_callbacks_controller.rb下添加
這時再回到 model 下的 user 添加一段回傳的代碼
最後 安裝 gem omniauth-rails_csrf_protection (1.0.0)
gem "omniauth-rails_csrf_protection"
bundle install
並在 /app/views/devise/shared/_links.html.erb 下
找到
<%= link_to “Sign in with #{OmniAuth::Utils.camelize(provider)}”, omniauth_authorize_path(resource_name, provider)%> 
將method: :post 添加進 link_to
然後重新啟動server 就大功告成
另外若遇到 顯示 You are using an old OmniAuth version, please ensure you have 1.0.0.pr2 version or later installed
可以將gemfile 中devise 改成 gem ‘devise’, github: ‘heartcombo/devise’, branch: ‘ca-omniauth-2’
分類:學習

評論
上一篇
  • [Rails][polymorphic]多型關聯
  • 下一篇
  • [Rails][notes]官網閱讀紀錄[1]
  • 更多文章
    載入中... 沒有更多了