Node.js OAuth 2-如何在不提供权限的情况下登录

Node.js OAuth 2-如何在不提供权限的情况下登录,node.js,express,oauth,google-oauth,Node.js,Express,Oauth,Google Oauth,我对OAuth完全陌生,有一个工作流问题。我正在使用node/express/passport,并且已成功设置应用程序,以便在请求我的/auth/google端点时重定向 然而,我总是被路由到谷歌权限页面,在那里我必须提供我的应用程序访问我的信息。我可以通过什么机制登录/注销而不必每次都提供访问权限?从本质上讲,我如何让用户在没有再次请求权限的情况下登录,但仍然让他们通过Google登录?典型的流程是让用户像您这样登录Google。一旦他们确认了您的应用程序所请求的范围,Google就可以向您的

我对OAuth完全陌生,有一个工作流问题。我正在使用node/express/passport,并且已成功设置应用程序,以便在请求我的
/auth/google
端点时重定向


然而,我总是被路由到谷歌权限页面,在那里我必须提供我的应用程序访问我的信息。我可以通过什么机制登录/注销而不必每次都提供访问权限?从本质上讲,我如何让用户在没有再次请求权限的情况下登录,但仍然让他们通过Google登录?

典型的流程是让用户像您这样登录Google。一旦他们确认了您的应用程序所请求的范围,Google就可以向您的服务器提供授权码,该授权码可以用来交换访问/刷新令牌,以便将来存储和使用


不过,Passport应该会从你们身上来回提取很多信息。你们在利用图书馆吗?如果是这样,您是否将访问和刷新令牌存储在您自己的本地数据库中以供重用(或者至少是刷新令牌,以便您可以在需要时获得新的有效访问令牌)?

因此这似乎是一条有用的路径!我所做的任何教程都没有提到实际使用access或refresh令牌。我正在使用您链接的库。我现在的问题是何时/如何保存访问和刷新令牌,以及如何将它们提供给passportIt,这在某种程度上取决于您打算如何使用令牌。如果它只是让用户登录谷歌的一种方式,那么你应该考虑在数据库中链接到用户的会话,以及存储与该用户相关联的刷新/访问令牌的地方。由于某些原因,该示例没有显示存储令牌,但是如果您不希望用户每次登录,则必须在某个位置执行此操作。安全地,最好是。然后,您需要使用类似的方法来验证链接的令牌。您还需要查看
passport
中的
反序列化用户
序列化用户
方法,因为这通常是在
passport
的上下文中封送用户进出数据库的方式,但是您必须向下滚动一点才能看到这些方法。因此,我已经阅读了有关使用cloud Memcache和express session跨多个实例存储会话信息的内容。这些稳定/持久性是否足以长期存储令牌?如果是这样的话,我会将Google登录按钮添加到该站点,按下时,我会让passport尝试授权他们,如果失败,我会将他们重定向到权限页面。这听起来接近正确吗?听起来memcache比你所期望的更易波动。我想这取决于如果您的服务器由于任何原因停机,您是否希望会话能够维护。如果答案是肯定的,您可能需要一个更传统的数据库。然后,您可以从数据库加载用户信息,并将其存储在更易波动的会话中,以便更快地查找(因此,您不必每次需要查找用户数据时都返回数据库)。我建议您阅读以下内容,这不是关于GoogleOAuth的,但是您将获得一些关于它的基本知识以及如何使用OAuthworks@myke_11j谢谢,我一定会看的!