Rails - Linkedin 验证:未找到。身份验证直通
Rails - Linkedin Auth: Not found. Authentication passthru
您好,您有一个使用 Linkedin 身份验证的应用程序,它曾经运行良好。今天我收到用户的投诉,说他们在 Linkedin 上点击登录时看到:Not found. Authentication passthru.
。它将他们带到页面:http://XXXXX/users/auth/linkedin?locale=en
当我查看日志时,我得到:
Started GET "/users/auth/linkedin?locale=en" for ::1 at 2021-07-12 18:04:13 +0800
Processing by OmniauthCallbacksController#passthru as HTML
Parameters: {"locale"=>"en"}
Rendering text template
Rendered text template (0.0ms)
Completed 404 Not Found in 3ms (Views: 0.9ms | ActiveRecord: 0.3ms)
我的控制器看起来像:
class OmniauthCallbacksController < Devise::OmniauthCallbacksController
def linkedin
@user = User.connect_to_linkedin(request.env["omniauth.auth"],current_user)
if @user.persisted?
flash[:notice] = I18n.t "devise.omniauth_callbacks.success"
sign_in_and_redirect @user, :event => :authentication
else
session["devise.linkedin_uid"] = request.env["omniauth.auth"].except("extra")
redirect_to new_user_registration_url
flash[:notice] = I18n.t "devise.omniauth_callbacks.failure"
end
end
我的模型中有以下内容:
设计:database_authenticatable,:可注册,
:recoverable, :rememberable, :trackable, :validatable, :confirmable, :omniauthable, :omniauth_providers => [:linkedin
user_linkedin_omniauth_authorize GET|POST /users/auth/linkedin(.:format) omniauth_callbacks#passthru
user_linkedin_omniauth_callback GET|POST /users/auth/linkedin/callback(.:format) omniauth_callbacks#linkedin
当我将 POST
方法添加到 link_to 时,我得到以下信息:
Started POST "/users/auth/linkedin?locale=en" for ::1 at 2021-07-12 21:56:18 +0800
D, [2021-07-12T21:56:18.416654 #65475] DEBUG -- omniauth: (linkedin) Request phase initiated.
W, [2021-07-12T21:56:18.417955 #65475] WARN -- omniauth: Attack prevented by OmniAuth::AuthenticityTokenProtection
E, [2021-07-12T21:56:18.418089 #65475] ERROR -- omniauth: (linkedin) Authentication failure! authenticity_error: OmniAuth::AuthenticityError, Forbidden
Processing by OmniauthCallbacksController#failure as HTML
和其他东西
请问您知道这突如其来的问题背后可能是什么原因吗?
几天前我做了一个 Bundle Update,开始出现很多错误。
None 目前我所看到的可能有所帮助。
在 application.rb
中,您的 config.load_defaults
设置为什么?如果将其设置为 6.1
,我自己也会遇到问题。 6.0
工作正常。它与 cookie SameSite 设置相关的一些问题(本地主机需要松散,并且 none+ 通常在网络上直播时安全 - 我可能是错的)。
还有,是的,请检查您是否正在使用 CSRF 检查对您的登录端点执行 POST。
我发现这是因为 OmniAuth 2 及更高版本默认启用了 CSRF 保护,并且不再像您正在尝试的那样支持 GET 请求。
我用两件事解决了这个问题:
添加omniauth-rails_csrf_protection
gem:https://github.com/cookpad/omniauth-rails_csrf_protection
更新您的 config/initializers/omniauth.rb 以包括:
OmniAuth.config.allowed_request_methods = [:get, :post]
您好,您有一个使用 Linkedin 身份验证的应用程序,它曾经运行良好。今天我收到用户的投诉,说他们在 Linkedin 上点击登录时看到:Not found. Authentication passthru.
。它将他们带到页面:http://XXXXX/users/auth/linkedin?locale=en
当我查看日志时,我得到:
Started GET "/users/auth/linkedin?locale=en" for ::1 at 2021-07-12 18:04:13 +0800
Processing by OmniauthCallbacksController#passthru as HTML
Parameters: {"locale"=>"en"}
Rendering text template
Rendered text template (0.0ms)
Completed 404 Not Found in 3ms (Views: 0.9ms | ActiveRecord: 0.3ms)
我的控制器看起来像:
class OmniauthCallbacksController < Devise::OmniauthCallbacksController
def linkedin
@user = User.connect_to_linkedin(request.env["omniauth.auth"],current_user)
if @user.persisted?
flash[:notice] = I18n.t "devise.omniauth_callbacks.success"
sign_in_and_redirect @user, :event => :authentication
else
session["devise.linkedin_uid"] = request.env["omniauth.auth"].except("extra")
redirect_to new_user_registration_url
flash[:notice] = I18n.t "devise.omniauth_callbacks.failure"
end
end
我的模型中有以下内容:
设计:database_authenticatable,:可注册, :recoverable, :rememberable, :trackable, :validatable, :confirmable, :omniauthable, :omniauth_providers => [:linkedin
user_linkedin_omniauth_authorize GET|POST /users/auth/linkedin(.:format) omniauth_callbacks#passthru
user_linkedin_omniauth_callback GET|POST /users/auth/linkedin/callback(.:format) omniauth_callbacks#linkedin
当我将 POST
方法添加到 link_to 时,我得到以下信息:
Started POST "/users/auth/linkedin?locale=en" for ::1 at 2021-07-12 21:56:18 +0800
D, [2021-07-12T21:56:18.416654 #65475] DEBUG -- omniauth: (linkedin) Request phase initiated.
W, [2021-07-12T21:56:18.417955 #65475] WARN -- omniauth: Attack prevented by OmniAuth::AuthenticityTokenProtection
E, [2021-07-12T21:56:18.418089 #65475] ERROR -- omniauth: (linkedin) Authentication failure! authenticity_error: OmniAuth::AuthenticityError, Forbidden
Processing by OmniauthCallbacksController#failure as HTML
和其他东西
请问您知道这突如其来的问题背后可能是什么原因吗? 几天前我做了一个 Bundle Update,开始出现很多错误。
None 目前我所看到的可能有所帮助。
在 application.rb
中,您的 config.load_defaults
设置为什么?如果将其设置为 6.1
,我自己也会遇到问题。 6.0
工作正常。它与 cookie SameSite 设置相关的一些问题(本地主机需要松散,并且 none+ 通常在网络上直播时安全 - 我可能是错的)。
还有,是的,请检查您是否正在使用 CSRF 检查对您的登录端点执行 POST。
我发现这是因为 OmniAuth 2 及更高版本默认启用了 CSRF 保护,并且不再像您正在尝试的那样支持 GET 请求。
我用两件事解决了这个问题:
添加
omniauth-rails_csrf_protection
gem:https://github.com/cookpad/omniauth-rails_csrf_protection更新您的 config/initializers/omniauth.rb 以包括:
OmniAuth.config.allowed_request_methods = [:get, :post]