我有一个网络应用程序。我正在使用Devise gem,我有一个扩展Devise::OmniauthCallbacksController
的控制器。我使用request.env["omniauth.auth"]
来授权用户。到目前为止,去年一切都很好。目前我的数据库中有uid
列用户。
现在,我正在构建移动应用程序,当我对用户进行身份验证时,我将令牌发送到服务器,并且我想验证用户是否已保留在我的数据库中。如果用户没有被持久化,我应该创建一个新帐户(在users表中添加行)并返回数据。
client = OAuth2::Client.new(
ENV[Rails.application.config.fb_app[:id]],
ENV[Rails.application.config.fb_app[:secret]],
site: 'https://graph.facebook.com')
token = OAuth2::AccessToken.new(client, fb_token)
user_data = ActiveSupport::JSON.decode(token.get('/me').body)
user = User.find_by(uid: user_data['id'])
问题是返回的id
与数据库中的uid
不同。我看到Facebook为不同的FB应用程序返回不同的id-s但我只有一个应用程序。
任何想法我应该如何处理这个问题?
P.S。当我从这里获取用户数据时:
https://graph.facebook.com/me?access_token=xxx
id与数据库中的UID不同。