gpt4 book ai didi

ruby - 无法使用 facebook 进行身份验证 : undefined method 'web_server' for OAuth2?

转载 作者:数据小太阳 更新时间:2023-10-29 07:16:25 25 4
gpt4 key购买 nike

试图让用户登录/注册 Twitter 和 Facebook。 Twitter 没有问题,但 Facebook 的策略不同。

undefined method `web_server' for #<OAuth2::Client:0x00000005211d58>

跟踪显示

oa-oauth (0.0.1) lib/omniauth/strategies/oauth2.rb:18:in `request_phase'
oa-oauth (0.0.1) lib/omniauth/strategies/facebook.rb:28:in `request_phase'
oa-core (0.0.5) lib/omniauth/strategy.rb:25:in `call!'
oa-core (0.0.5) lib/omniauth/strategy.rb:19:in `call'
oa-core (0.0.5) lib/omniauth/builder.rb:22:in `call'
warden (1.0.5) lib/warden/manager.rb:35:in `block in call'
warden (1.0.5) lib/warden/manager.rb:34:in `catch'
warden (1.0.5) lib/warden/manager.rb:34:in `call'

有没有人遇到过这种情况?

附言。我正在使用以下 gem :

gem 'oa-oauth', :require => 'omniauth/oauth'
gem 'oauth2'

我没有使用完整的 omniauth gem,因为它的可寻址依赖项与其他 gem 有冲突。

最佳答案

尝试在我的 Rails 应用程序上使用 facebook_oauth (https://github.com/moomerman/facebook_oauth) 时,我遇到了同样的问题。在花了一个小时左右尝试更改其代码后,我意识到直接使用 oauth2 可能更容易。我解决了这个问题,现在不需要那个中间库了。方法如下:

Gemfile 中添加

gem 'oauth2'

然后运行

bundle 更新

然后,在您的 login_via_facebook 方法中,您可以手动构建对话 uri 或使用 oauth 客户端,这些是:

oauth_client = OAuth2::Client.new(APPLICATION_ID, APPLICATION_SECRET, {
:authorize_url => 'https://www.facebook.com/dialog/oauth'
})

redirect_to oauth_client.authorize_url({
:client_id => APPLICATION_ID,
:redirect_uri => YOUR_REDIRECT_URL
})

如果您需要请求额外的权限,请在 authorize_url 调用中指定 scope 参数:

redirect_to oauth_client.authorize_url({
:client_id => APPLICATION_ID,
:redirect_uri => YOUR_REDIRECT_URL,
:scope => 'offline_access,email'
})

然后,在处理 YOUR_REDIRECT_URL 的方法中(我调用我的 login_via_facebook_callback),执行如下操作:

oauth_client = OAuth2::Client.new(APPLICATION_ID, APPLICATION_SECRET, {
:site => 'https://graph.facebook.com',
:token_url => '/oauth/access_token'
})

begin

access_token = oauth_client.get_token({
:client_id => APPLICATION_ID,
:client_secret => APPLICATION_SECRET,
:redirect_uri => YOUR_REDIRECT_URL,
:code => params[:code],
:parse => :query
})

access_token.options[:mode] = :query
access_token.options[:param_name] = :access_token
facebook_user_info = access_token.get('/me', {:parse => :json}).parsed

rescue Error => e

# You will need this error during development to make progress :)
#logger.error(e)

end

现在 facebook_user_info 有了基本的用户信息!

关于ruby - 无法使用 facebook 进行身份验证 : undefined method 'web_server' for OAuth2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6967737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com