是否可以根据需要多次扩展用户的访问令牌而无需注销用户?
我可以在客户端交换长期令牌,但在源代码中可以看到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(将其注销)吗?这将强制用户再次登录,并且将刷新访问令牌。是否可以扩展更新访问令牌,以便用户不必再次登录?