Gem [已解决] 使用 omniauth-weibo-oauth2 的问题

neilalaer · May 25, 2012 · Last by 2233466866 replied at January 10, 2018 · 14536 hits

Update: 从日志中可以看到(weibo) Callback phase initiated出现了两次;另外,终端中打印输出 omniauth 代码 strategy.rb 中的 auth_hash,其实已经能看到明文的 access token,说明第二次 callback 是多余的并且很可能是产生错误的原因,在“如何去掉第二次 callback”上花了不少时间,无果。

最后发现,因为参考了不同的网上教程,分别在 config/initializers/devise.rb 和 config/initializer/omniauth.rb 中两次填写了同一个 provider.

为什么 omniauth gem 的机制不是覆盖同名 provider,而是创建两个实例呢?

Hinted by: http://goo.gl/bcKMO


Update: 针对 (error:redirect_uri_mismatch) 的问题,新浪论坛http://forum.open.weibo.com/thread.php?fid=5 里的大多碰到同样问题,其实新浪服务器端需要完全匹配完整的 URI,比如:少了“www”不行;本地环境必须以"127.0.0.1 访问"(新浪应用控制台中的“应用信息”->"高级信息"中的"授权回调页"框不接受“localhost”)。


碰到的情况 参考了 devise 的文档http://goo.gl/5HgXj 所述步骤 (auth 相关),使用 omniauth-weibo-oauth2 gem,总是碰到以下错误,无法进入授权页面。 ‘你所访问的站点在新浪微博的认证失败,...(error:redirect_uri_mismatch)’

地址栏信息为 https://api.weibo.com/oauth2/authorize?response_type=code&client_id=342xxxxxx &redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fusers%2Fauth%2Fweibo%2Fcallback.

网站应用,“应用信息->高级信息”->"OAuth2.0 授权设置"中的信息 授权回调页:http://127.0.0.1:3000/users/auth/weibo/callback

参考了 devise 的文档http://goo.gl/5HgXj user_omniauth_callback_path(:weibo) 确实为 http://localhost:3000/users/auth/weibo/calback

我的问题 请问,哪里的信息不对?应该如何配置?

有点晕,我把本地的访问地址改成http://127.0.0.1:3000, 总算能导航到授权页面了。

新的问题又出来了,invalid authorization code (error code: 21325),

Started GET "/users/auth/weibo" for 127.0.0.1 at 2012-05-25 15:06:18 +0800
(weibo) Request phase initiated.

Started GET "/users/auth/weibo/callback?code=60f9abd48b0300832834d49df8fd3xxx" for 127.0.0.1 at 2012-05-25 15:06:18 +0800
(weibo) Callback phase initiated.
(weibo) Callback phase initiated.
(weibo) Authentication failure! invalid_credentials: OAuth2::Error, invalid_grant: invalid authorization code:60f9abd48b0300832834d49df8fd3xxx
{"error":"invalid_grant","error_code":21325,"request":"/oauth2/access_token","error_uri":"/oauth2/access_token","error_description":"invalid authorization code:60f9abd48b0300832834d49df8fd3xxx"}
Processing by Users::OmniauthCallbacksController#failure as HTML
  Parameters: {"code"=>"60f9abd48b0300832834d49df8fd3xxx"}
Redirected to http://127.0.0.1:3000/users/sign_in
Completed 302 Found in 184ms

见原帖更新部分。

#2 楼 @neilalaer 你好,同样的问题,可否给个邮件或者QQ,咨询一下。

改本地 hosts

127.0.0.1 yourhost

然后访问:

yourhost:3000/auth/weibo

您好,我碰到相同的问题:”你所访问的站点在新浪微博的认证失败,...(error:redirect_uri_mismatch)“,我也尝试改成 127.0.0.1,但还是不能进入授权页面,请问是怎么回事?是不是因为我的网站没有备案,只是获取了 key 和 scret,所以在无法进入授权页面?

只要將瀏覽器上的 URL 由原本的http://localhost:3000 改為 http://127.0.0.1:3000 再點微博登入就可以解決

最近在做 weibo 第三方,Authentication failure! invalid_credentials: OAuth2::Error, invalid_request: miss redirect uri. {"error":"invalid_request","error_code":21323,"request":"/oauth2/access_token","error_uri":"/oauth2/access_token","error_description":"miss redirect uri."} ,我在微博开放平台已经配置 redirect_uri 了,怎么还说我 miss redirect uri ?

Reply to void_dawn

你是修改了回调地址吧?这种情况需要审核的,审核期间确实报这种错误,但是你之前用的回调地址在审核期间是可用的

You need to Sign in before reply, if you don't have an account, please Sign up first.