我正在使用omniauth通过Google对用户进行身份验证。当用户通过Google登录时,我会检查一个帐户是否已存在同一封电子邮件(如果有,我拒绝登录)。
当我创建新的用户模型时,我会给它命名,发送电子邮件,以及用户“图像”的URL。当用户更改Google上的设置时,我不确定如何动态更新数据库中的信息,包括更改其个人资料图片时的image_url。
这种情况的一个很好的例子是Stack Overflow;我和谷歌签约了。更改了我的个人资料图片(最近),我惊讶地发现我的旧Google图片仍然附加到我的SO个人资料中。也许Google需要时间来更改旧URL以表示新图像。我注意到Google的某些部分使用了我的新图像,其他部分继续使用我的旧图像。当然,这个问题与谷歌的个人资料图像机制没什么关系,我只是觉得这是一个很好的例子。
我不认为答案是“不存储用户信息,而是查询Google”,所以我不确定在这种情况下最佳做法是什么。简要介绍正确的程序将非常有帮助。
通常,oauth应用程序将使用端点/me.json
作为登录过程的一部分:在用户登录后,应用程序使用该新令牌立即查询其配置文件信息并更新数据。在您的情况下,我理解您在电子邮件已存在时忽略。您应该在那里添加一个新步骤,以更新本地记录(如果它已经存在)而不是纯粹忽略它。
换句话说,如果用户更改其个人资料照片,您的应用将不会自动得到通知。但是你总是可以使用他们的登录操作来获取最新的图像(或者在后台作业中使用他们的令牌,这个作业每隔n个时间运行一次,比如cron +,假设oauth作用域授权离线访问)