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
我的问题 请问,哪里的信息不对?应该如何配置?