- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个应用程序,用户可以在其中链接他们的 Facebook 帐户。他们可以使用他们的电子邮件登录,但他们可以链接他们的 Facebook 帐户。
在我显示链接的社交网络(Facebook 和其他人)的 View 中,我有这样的东西:
<%= image_tag @facebook.get_facebook_picture %>
这将调用这样的实例方法:
def get_facebook_picture
unless self.token.nil?
facebook_graph = Koala::Facebook::GraphAPI.new(self.token)
fb_picture = facebook_graph.get_picture("me", { :type => "small" })
end
end
除非我存储在我的数据库中的 Facebook token 已过期,否则这会很好地工作。所以我在提到的 Controller 中添加了这个异常处理程序:
def facebook_exception_handler exception
if exception.fb_error_type.eql? 'OAuthException'
# Let's get a new auth token... How?
else
logger.debug "Damn it. We don't know what error is coming from FB"
raise exception
end
end
我正确地捕获了异常,但我看不到如何更新数据库中的访问 token 。请注意,我已经使用 OmniAuth 插入了访问 token 。所以我的问题是:
鉴于我有一个 OAuthException
,我如何使用 Omniauth 更新特定用户 (UID) 的访问 token ?
最佳答案
简单的情况是,您使用 FB 重新授权用户,就像您首先授权他们一样。首先要获得 token ,我假设您正在使用 omniauth(和 onmiauth-facebook)对 FB 进行身份验证。这意味着您有一个路由和一个 Controller 操作来处理身份验证回调,以及一个将 token 插入数据库的函数。
您最初通过 omniauth 获得的访问 token 可能会因各种原因而变得无效 - 过期,或者因为用户更改了他们的 FB 密码,还有可能是其他原因。在这些情况下,另一个 OAuth 调用将返回一个有效 token 。只需再次调用(就像您第一次授权用户时所做的那样)并在您的数据库中用新 token 替换无效 token ,就可以了。
This gist (my own answer 到我在这里问的一个相关问题)有一些代码涵盖了这一点,但听起来你已经涵盖了这一点。保存足够的状态,然后重新尝试触发异常的任何事情,你就很好了。
token 现在无效也可能是因为用户更改了他们的 FB 应用程序设置以取消对您的应用程序的授权。在这种情况下,用户将看到 FB 权限对话框,就好像他们是第一次针对 FB 进行身份验证的新用户一样。 ( FB )
这有意义吗?
关于ruby-on-rails - Rails - 带有 Omniauth 和 Koala 的 Facebook : How to renew an expired token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10183561/
我是一名优秀的程序员,十分优秀!