使用Google,OAuth2登录,如何验证用户?

时间:2016-03-01 03:51:15

标签: ruby-on-rails authentication oauth oauth-2.0 google-oauth

我在Rails上有一个应用程序,我正在尝试使用Google登录,这是我登录的主要方式。

我正在使用google-api-ruby-client。登录页面具有链接到auth uri的Google按钮,使用客户端机密生成。

  1. 我已设法通过fetch_access_token!使用'email'和'profile'范围从用户那里获取访​​问令牌。
  2. 我正在点击https://www.googleapis.com/oauth2/v1/userinfo获取用户名,电子邮件和Google ID。
  3. 我还没知道如何使用刷新令牌。
  4. 但是,我很困惑如何识别用户。例如,用户第一次登录时:

    1. 使用Google进行身份验证,我会将Google用户ID,电子邮件,访问令牌和刷新令牌保存到数据库中。
    2. session[:access_token] = auth_client.access_token
    3. session[:current_user] = google_id(来自userinfo端点)
    4. 随后当用户访问网站上的任何页面时,我将使用before_filter :authenticate方法检查session[:access_token],在数据库中查询相同的acccess_token并查看{{从数据库返回的1}}与google_id匹配。

      当用户仍在使用我的网站时访问令牌过期时,我可能会使用刷新令牌获取新的访问令牌并更新会话和数据库信息。我可以这样做,因为我在会话中仍然拥有用户的ID。

      当用户稍后回到网站时,我可以再次获得新的访问令牌并更新访问令牌并刷新数据库和会话中的令牌,因为用户必须通过Google再次登录才能匹配打开数据库中的电子邮件或ID。

      3个问题:

      1. 这是验证用户的可接受方式吗?如果没有,那么正确的方法是什么?
      2. 我可以安全地将session[:current_user]替换为我自己随机生成的ID,对吗?
      3. 在StackOverflow或Facebook上,我们无需重新登录,因为我们已经登录。如何实现此目的?

0 个答案:

没有答案