我是否应该将用户注销以扩展Facebook访问令牌?

时间:2013-03-30 15:46:08

标签: ruby-on-rails ruby facebook-javascript-sdk facebook-oauth

是否可以根据需要多次扩展用户的访问令牌而无需注销用户?

我可以在客户端交换长期令牌,但在源代码中可以看到app_secret。如果我在服务器端执行此操作,我只能执行一次,主要问题仍然存在(到期)。

长问题:

我有网络应用,我想显示用户的Facebook好友数量。用户使用Facebook Javascript SDK登录,然后将它们重定向到回调URL,我的服务器代码存储其访问令牌(短期)。它还在会话中设置* user_id *,以便我记住用户已登录(用于身份验证)。

auth = env["omniauth.auth"]
user = User.from_omniauth(auth)
if user.save
   session[:user_id] = user.id

...

def self.from_omniauth(auth)
  where(auth.slice(:provider, :uid)).first_or_initialize.tap do |user|
    user.provider = auth.provider
    user.uid = auth.uid
    if auth.provider == "facebook"
      user.oauth_token = auth.credentials.token
      user.oauth_expires_at = Time.at(auth.credentials.expires_at)
    end
  end
end

我有一个后台工作,它接受所有访问令牌并更新数据库中的朋友号码。问题:当用户回来时,访问令牌不会更新,因为我在其会话中仅检查* user_id *。因此令牌不会更新。由于令牌过期,作业将无法获取好友数量。

当作业找到过期令牌时,我应该将* user_id *设置为nil(将其注销)吗?这将强制用户再次登录,并且将刷新访问令牌。是否可以扩展更新访问令牌,以便用户不必再次登录?

0 个答案:

没有答案