问题标签 [passport-google-oauth2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
270 浏览

node.js - Properly handling Google OAuth with separated frontend and backend

I have my frontend using React/Next.JS, and I'm wanting to implement Google OAuth for authentication to the users info in the backend.

On the backend, I'm using Express and Passport for routing and authentication respectively. I got all of this working with just the plain username and password, however I decided that I would rather have this with just using OAuth services.

So the current flow:

User on FRONTEND clicks "Login with Google", which redirects them to BACKEND/login/google, which then of course handles logging in with Google, which then once its done redirects to BACKEND/login/google/callback, which will then redirect you to the frontend.

Now here's the issue. On the callback route in my backend, calling Request.isAuthenticated() works just fine. However once the user has navigated back to the frontend, each subsequent request is not authenticated.

My thought here is that since the user is technically being logged in on the backend, the session is being tied to the backend.

What would be a proper way of handling this type of scenario?

0 投票
0 回答
158 浏览

node.js - Google oauth 在本地主机上工作,但不在我的网络服务器上

只是对 google oauth 感兴趣。

谷歌有你可以访问的三个基本范围,电子邮件、openid 和个人资料。在本地将其构建到我的网站中时,所有三个范围都可以工作。但是,我今天将网站上传到我的服务器上,当我尝试通过 google oauth 进行身份验证时,它返回了错误 403(禁止)。当我从范围中删除配置文件时,它工作得很棒!

为什么“个人资料”在本地网站上有效,但在服务器端网站上无效?我已经研究了一整天,发现了一些关于使用 google+ api 的信息,但我不知道在我的应用程序中放置密钥的位置。

'openid' 和 'email' 工作,所以我可以在网站上做一个工作,但是任何帮助将不胜感激。

0 投票
1 回答
67 浏览

node.js - 猫鼬中未调用 userSchema.methods 函数

我写userSchema.methods.generateAuthToken()的功能如下

我在我的代码中调用这个函数 while authenticating with google。以下是谷歌验证码

findOrCreate()出于某种原因,我不会使用方法。相反,我正在使用find()猫鼬的方法检查用户是否已经存在。问题是,当用户不存在时,req.user.generateAuthToken方法会被调用,但是当用户已经存在时,它会说generateAuthToken方法不存在。它应该每次都运行。

0 投票
1 回答
93 浏览

javascript - Passport-google-oauth-20 不适用于heroku

正如我添加的所有解决方案中所写

代理:真

,但它什么也没改变。

在谷歌控制台开发人员中,我添加了 http 和 https,以确保一切正常。

这是我的控制台开发人员控制台: 这是我的控制台开发者控制台

和错误:

错误

0 投票
2 回答
94 浏览

node.js - 使用 jwt 的护照谷歌策略

我在以前的项目中进行了jwt 身份验证,但之前从未使用过oauth/passport auth。我已经学习了护照策略并实施了google+ 策略已经 3 天了。我有一个新项目,这个项目需要让用户使用google 或 facebook 或使用firstName、lastName、电话号码和密码的注册表格自己注册/登录。

  1. 在 jwt 服务器中非常简短地向客户端发送令牌,然后客户端将请求标头中的特定令牌发送回服务器以访问受保护的路由。
  2. 在护照谷歌策略中,cookie 保存在浏览器中,并在每次请求时发送到服务器。

我认为是

我不能在一个项目中使用两种不同的方法。如果我将 jwt 用于注册表单,将 cookie 用于谷歌策略,那么我将如何保护我的路线?在标头中使用令牌或在浏览器中使用 cookie

现在我的问题是

我如何在同一个项目中同时使用两者?

  • 在谷歌策略中,我应该在 serializeUser() 或其他地方为客户端生成 jwt (令牌),或者还有什么可能?
  • 或者我应该将 jwt 令牌保存在像护照这样的浏览器 cookie 中吗?

我非常简要地介绍了一些东西,我希望你能明白我在这里想要做的事情


0 投票
0 回答
214 浏览

c# - 使用 Google API 在服务器端获取用户信息

我想知道如何使用来自 Google API 的访问令牌获取用户详细信息、名字、姓氏和电子邮件 ID。目前,我正在使用以下代码返回我

使用 RestSharp 的服务器端 c# 代码

OAuth consent screenGoogle 控制台中,我没有在Scopes. 这会是个问题吗?我只访问基本信息。另外,我不确定要添加哪些范围。

在此先感谢并感谢您对此的任何帮助。

更新:我尝试添加这个范围 - https://www.googleapis.com/auth/userinfo.profile但它仍然是同样的问题。

这是我的流量。我在页面上有这个链接

单击此链接后,用户将被重定向到 Google 身份验证页面。一旦通过身份验证,它就会使用访问令牌重定向到重定向 URL,然后在服务器端进行验证并获取用户信息。

0 投票
1 回答
405 浏览

node.js - OAuth2 - 错误 400:redirect_uri_mismatch 与 Passport,重定向 URL 与设置的不同

我尝试使用护照在我的 express API 中实现 google OAuth2,但出现错误:

在此处输入图像描述

---------------------------------------------路由文件
users.js

在 Google 开发人员控制台中,我将授权重定向 URI 设置为:

http://localhost:3000/users/auth/google/callback 我的客户端 ID 和密码是正确的。

在错误消息中,我可以看到重定向 URI 是:http://localhost:3000/auth/users/auth/google/callback

Url路径的开头有一个额外auth的,奇怪的是我没有设置它。我怎样才能删除它?我什至可以删除它吗?

0 投票
0 回答
139 浏览

node.js - 如何使用 passport-google 策略从节点/express js 验证 Angular 10 客户端应用程序?

我正在构建一个在微服务架构之上使用的 Web 应用程序。

使用 node/express js 我已经实现了身份验证服务和产品服务都在监听不同的端口,比如

http://localhost:8001 用于认证服务 http://localhost:8002 用于产品服务。

Kong Gateway 用于使用 jwt 对微服务进行身份验证和连接。实施了 passport-jwt 和 passport-local 策略,以使用 post 调用从客户端对用户进行身份验证。

最后,我在下面的 URL 中使用 passport-google 策略在服务器端实现了 google auth

http://localhost:8001/auth/google -> 登录后它会将我引导到 google auth 同意屏幕,它会重定向到下面的 Url

http://localhost:8001/auth/google/带有令牌的回调。它在服务器端运行良好。

. 当我从角度应用程序客户端对用户进行身份验证时。我无法继续前进。只是在这里挣扎。:-(

当用户单击客户端角度 10 中的 google 登录按钮时,如何验证用户身份?

我的前端应用程序 URL,例如http://localhost:4002/account/login

尝试使用window.open("http://localhost:8001/auth/google","_blank")方法,但未按预期工作。

res.setHeader('x-code', 'jwthere'); 头方法。还尝试使用 URL 参数传递 JWT 令牌。但两者似乎都不安全。

http://localhost:4002/account/login?token=7wF8bit5W1Pfi5Glt1X8H0YQu8BN7OeNRcX1zbj3AGpUHaYSxLlNIjHpzuw

安全是这里的主要问题。我想要像 khanacademy 社交登录一样的 google 登录

https://www.khanacademy.org

0 投票
1 回答
63 浏览

node.js - 在 Google Oauth2 登录后将 JWT 传递给 UI 应用程序

我创建了一个具有单独后端和前端的 MERN 应用程序。我添加了对使用passport-google-oauth20npm 包的 Google Oauth2 登录的支持。

所以我在后端暴露了一个端点,如下所示:

以下是护照设置供参考:

在 UI 应用程序中,单击按钮时,我将打开一个新窗口,该窗口将打开“/api/auth/google”后端 API。使用 google 帐户进行身份验证后,窗口将重定向到“/api/auth/google/callback”后端 API,我可以在其中生成 JWT。我不确定如何将此 JWT 传输到前端应用程序,因为它是在单独的窗口中打开的。

我知道这res.cookie('jwt', jwt)是一种方法。请在此处建议最佳实践..

0 投票
1 回答
82 浏览

express - `当我尝试使用`passport-google-oauth20`登录时`无法设置标题后发送到客户端`

当我尝试使用 将 Google OAuth 实施到我的节点应用程序中passport-google-oauth20时,我遇到了问题。

每当我尝试使用以下代码第一次登录机密页面时,我无法进行身份验证并被重定向到该/login页面,Cannot set headers after they are sent to the client即使newUser已保存在 mongoDB 中,也会在序列化用户的行中收到错误消息。

但是,我可以在第二次登录尝试时成功验证并登录到机密页面。

发生错误的幕后发生了什么?第一次登录尝试时如何成功验证用户身份?

我也提到了这个问答