gpt4 book ai didi

ruby-on-rails - Rails - 带有 Omniauth 和 Koala 的 Facebook : How to renew an expired token

转载 作者:行者123 更新时间:2023-11-30 05:19:08 25 4
gpt4 key购买 nike

我有一个应用程序,用户可以在其中链接他们的 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/

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