Jos*_*ech 14 ruby sinatra oauth-2.0 omniauth
我得到了这个
OmniAuth :: Strategies :: OAuth2 ::/auth/google/callback中的CallbackError csrf_detected | CSRF检测到
我的代码:
require 'sinatra'
require "sinatra/json"
require "sinatra/config_file"
require 'omniauth-oauth2'
require 'omniauth-google-oauth2'
use Rack::Logger
config_file "config/app_config.yml"
use Rack::Session::Cookie, secret: '5fb7w345y3489f523y4h'
configure do
enable :sessions
end
use OmniAuth::Builder do
provider :google_oauth2, settings.google[:client_id], settings.google[:secret],
{
:scope => "userinfo.profile",
:access_type => "offline",
:prompt => "select_account consent",
:name => "google"
}
end
get '/list' do
json get_list
end
get '/' do
%Q|<a href='/auth/google'>Sign in with Google</a>|
end
get '/auth/:name/callback' do
@auth = request.env['omniauth.auth']
@auth.inspect
end
Run Code Online (Sandbox Code Playgroud)
我的回调是返回代码和状态.
gdu*_*lle 10
得到了同样的问题
(google_oauth2)已启动回调阶段.
(google_oauth2)身份验证失败!csrf_detected:OmniAuth :: Strategies :: OAuth2 :: CallbackError,csrf_detected | CSRF检测到
最后一次Omniauth-oauth2更新引入了"state"param有一个必填字段.
有些人建议使用provider_ignores_state:true但这是一个坏主意,因为它引入了csrf缺陷
猜猜我们将不得不降级到以前的版本以保持google_oauth2正常运行.
在https://github.com/intridea/omniauth-oauth2/issues/58上发布
小智 8
当定义的域/config/initializer/session_store.rb与google api控制台中定义的origin/redirect_uri不同时,rails会出现此问题.
MyApp::Application.config.session_store :cookie_store, key: '_app_session', domain: 'my_app.com'
Run Code Online (Sandbox Code Playgroud)
删除域params或双方使用相同的域修复了该问题.
如果你正在使用Devise和OmniAuth,你需要跳过额外的omniauth.rb初始化文件,只需在initializers/devise.rb中添加config.provider"KEY","SECRET",然后继续执行.
| 归档时间: |
|
| 查看次数: |
16350 次 |
| 最近记录: |