如何解决使用 devise、omniauth 和 devise-token-auth 时,没有路由匹配“omniauth/:provider”
我正在尝试允许我的用户使用 devise
、omniauth
和 devise-token-auth
使用他们的 Google 帐户登录。为此,我将以下代码添加到 Rails API-only 样板中。
# Gemfile
...
# authentication
gem 'devise','~> 4.7'
gem 'devise_token_auth',git: 'https://github.com/lynndylanhurley/devise_token_auth'
gem 'omniauth','~> 1.9.1'
gem 'omniauth-google-oauth2
...
# config/initializers/omniauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
provider :google_oauth2,ENV['GOOGLE_KEY'],ENV['GOOGLE_SECRET']
end
# config/routes.rb
Rails.application.routes.draw do
root 'application#home'
mount_devise_token_auth_for 'User',at: 'auth'
end
对于前端,我使用 j-toker
并将其设置如下
Auth.configure({
apiUrl: `http://localhost:8000/`,authProviderPaths: {
google: `/auth/google_oauth2`,},});
Auth.oAuthSignIn({ provider: `google` }).then(() => {
// handle result
});
问题:当用户单击登录按钮时,会打开一个带有 rails 错误消息 No route matches [GET] "/omniauth/google_oauth2"
似乎 /auth/google_oauth2
重定向到 /omniauth/google_oauth2
但 /omniauth/:provider
路径不存在
rails routes
的输出如下:
Prefix Verb URI Pattern Controller#Action
root GET / application#home
new_user_session GET /auth/sign_in(.:format) devise_token_auth/sessions#new
user_session POST /auth/sign_in(.:format) devise_token_auth/sessions#create
destroy_user_session DELETE /auth/sign_out(.:format) devise_token_auth/sessions#destroy
new_user_password GET /auth/password/new(.:format) devise_token_auth/passwords#new
edit_user_password GET /auth/password/edit(.:format) devise_token_auth/passwords#edit
user_password PATCH /auth/password(.:format) devise_token_auth/passwords#update
PUT /auth/password(.:format) devise_token_auth/passwords#update
POST /auth/password(.:format) devise_token_auth/passwords#create
cancel_user_registration GET /auth/cancel(.:format) devise_token_auth/registrations#cancel
new_user_registration GET /auth/sign_up(.:format) devise_token_auth/registrations#new
edit_user_registration GET /auth/edit(.:format) devise_token_auth/registrations#edit
user_registration PATCH /auth(.:format) devise_token_auth/registrations#update
PUT /auth(.:format) devise_token_auth/registrations#update
DELETE /auth(.:format) devise_token_auth/registrations#destroy
POST /auth(.:format) devise_token_auth/registrations#create
auth_validate_token GET /auth/validate_token(.:format) devise_token_auth/token_validations#validate_token
auth_failure GET /auth/failure(.:format) users/omniauth_callbacks#omniauth_failure
GET /auth/:provider/callback(.:format) users/omniauth_callbacks#omniauth_success
GET|POST /omniauth/:provider/callback(.:format) users/omniauth_callbacks#redirect_callbacks
omniauth_failure GET|POST /omniauth/failure(.:format) users/omniauth_callbacks#omniauth_failure
GET /auth/:provider(.:format) redirect(301)
如您所见,/omniauth/:provider
路由甚至不存在......知道问题是什么吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。