加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails – Facebook与Omniauth和Koala:如何续

发布时间:2020-12-16 19:14:23 所属栏目:百科 来源:网络整理
导读:我有一个应用程序,用户可以链接他们的Facebook帐户.他们可以使用他们的电子邮件登录,但他们可以链接他们的Facebook帐户. 在我显示链接的社交网络(Facebook和其他)的视图中,我有这样的事情: %= image_tag @facebook.get_facebook_picture % 这将调用这样的实
我有一个应用程序,用户可以链接他们的Facebook帐户.他们可以使用他们的电子邮件登录,但他们可以链接他们的Facebook帐户.

在我显示链接的社交网络(Facebook和其他)的视图中,我有这样的事情:

<%= 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令牌已过期.所以我在上述控制器中添加了这个异常处理程序:

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

我正确地捕获了异常,但是我没有看到如何更新我在数据库中的访问令牌.请注意,我使用OmniAuth插入了我的访问令牌.所以我的问题是:

鉴于我有OAuthException,如何使用Omniauth续订特定用户(UID)的访问令牌?

解决方法

简单的情况是您使用FB重新授权用户,就像您首先授权用户一样.为了获得令牌,我假设您正在使用omniauth(和onmiauth-facebook)对FB进行身份验证.这意味着你有一个路由和一个控制器动作来处理auth回调,以及一个将令牌插入数据库的函数.

您最初使用omniauth获取的访问令牌可能因各种原因(到期)或因为用户更改了他们的FB密码而可能变得无效.在这些情况下,另一个OAuth调用将返回有效令牌.只需再次调用(就像您第一次授权用户时所做的那样)并在数据库中用新的令牌替换无效令牌,并且您很好.

This gist(my own answer到我在这里提到的一个相关问题)有一些代码覆盖了它,但听起来你已经覆盖了这个.保存足够的状态然后重新尝试触发异常的任何事情并且你很好.

此令牌现在也可能无效,因为用户已更改其FB应用设置以取消授权您的应用.在这种情况下,用户将看到FB权限对话框,就好像他们是第一次对FB进行身份验证的新用户一样. (FB)

那有意义吗?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读