使用passport。js的googleauth2。0的JWT身份验证
第 1 步: 创建您的初始node.js 应用程序并安装以下包,因为我们将在我们的项目中使用它 npm i express,jsonwebtoken,passport,passport-google-oauth20,dotenv
第 2 步: 在 google developer console 中创建一个新项目并获取 google client id 和 secret。 将此配置添加到 .env 文件并添加 jwt 秘密,使用此命令创建一个随机秘密。 openssl rand -base64 32
第 3 步: 在您的应用中创建文件 passport.js。 const passport = require("passport"); const GoogleStrategy = require("passport-google-oauth20").Strategy; const jwt = require("jsonwebtoken"); passport.use( new GoogleStrategy( { clientID: process.env.GOOGLE_CLIENT_ID, clientSecret: process.env.GOOGLE_CLIENT_SECRET, callbackURL: "http://localhost:5000/api/auth/googleRedirect", }, async function (accessToken, refreshToken, profile, done) { return done(null, profile); } ) );
第 4 步:创建 auth.route.js 文件 const jwt = require("jsonwebtoken"); const express = require("express"); const router = express.Router(); const passport = require("passport"); /* 这是用户单击 Google 登录按钮时将被重定向到的路由。*/ router.get( "/login/google", passport.authenticate("google", { scope: ["profile", "email"] }) ); // GOOGLE LOGIN CALLBACK router.get( "/googleRedirect", passport.authenticate("google"), async (req, res) => { console.log("req.user", req.body); const users = { firstName: req.user.displayName, lastName: req.user.name.familyName, email: req.user.emails[0].value, imgURL: req.user.photos[0].value, lastLogin: Date.now(), }; /* 检查用户是否存在于数据库中的函数。 如果是,它返回用户。 如果没有,它会创建一个新用户。 */ await Users.findOne({ email: users.email }, async (err, user) => { if (err) { done(err, false, { message: "Something went wrong with Google OAuth", }); } if (user) { // 用户已经存在于我们的数据库中 console.debug("User already exists in our database"); // 更新上次登录时间戳 user.lastLogin = Date.now(); Users(user).save(); let token = jwt.sign( { data: users, }, process.env.JWT_SECRET, { expiresIn: "24h" } ); // expiry in 24 hours res.cookie("jwt", token); res.redirect(process.env.CLIENT_AUTH_REDIRECT_URL); } else { Users(users).save(); let token = jwt.sign( { data: users, }, process.env.JWT_SECRET, { expiresIn: "24h" } ); // expiry in 24 hours res.cookie("jwt", token); res.redirect(process.env.CLIENT_AUTH_REDIRECT_URL); } }); } ); module.exports = router;
第 5 步: 创建一个中间件控制器来验证并从数据库中获取详细信息。 const jwt = require("jsonwebtoken"); const userModel = require("../model/user.model"); //获取当前用户详情的中间件 router.get("/current_user", verifyStudent, currentuser); exports.verifyStudent = async (req, res, next) => { const jwt_t = req.headers.cookie; if (jwt_t) { const token = jwt_t.split("=")[1].split(";")[0]; jwt.verify(token, process.env.JWT_SECRET, async (err, user) => { if (err) { return res.status(403).json("Token is not valid!"); } const user = await userModel.findOne({ email: user.data.email }); if (!user) { return res.status(403).json("User not found!"); } req.user = user; next(); }); } else { return res.status(401).json("You are not authenticated!"); } }; exports.currentuser = async (req, res) => { if (req.user) { res.status(200).json({ message: "User is logged in successfully!", success: true, user: req.user, }); } else { res.status(401).json({ message: "Invalid user id!", success: false, }); } };
吾日三省(三)文章小计一篇,带来一些小思考。祝我们平日快乐今天有香客跟我说我觉得你活得很容易,也很坦然。我说容易么?我并不觉得。每个人其实都不容易,没有例外。尤其是当祸不单行的时候,简直能把人逼
匈牙利不再被欧盟视为民主国?下一步或许被劝退?木叔这篇国际评论,来分析欧盟对匈牙利的态度。匈牙利这个国家有点意思,最近经常被欧盟点名除了在俄乌战争中和欧盟多数国家立场不太一致之外,匈牙利在法治和人权等问题的承诺上也让欧盟失望。
从美制俄制到国产,志愿军遗骸乘运20回家,歼20双机空中护航在2014年,我国派出了首架前往韩国首尔仁川机场接运志愿军烈士遗骸的专机,当时我国动用的并不是来自空军部队的运输机,而是一架由中国货运航空提供的美制波音747全货机来完成志愿军遗骸
低层次的人,总爱炫耀这4样东西天狂有雨,人狂有祸。层次越高的人,越低调层次越低的人,越喜欢炫耀。炫耀幸福西方人常说不要炫耀你的幸福,因为这会刺痛别人的眼。人类的悲欢并不相通,不是所有人都能对你的幸福感同身受。有
新晋鬼畜顶流科目三,暴露了多少Z世代对科三考试的恐惧?头号周刊学车,是每个年轻人都要面对的一次人生试炼,只有考过了你才能拿到正规驾驶证,才能真正走上成为一名老司机的道路。可在你准备要成为老司机之前,你必须要面对的是史上最严最难的科目三
衰落的俄罗斯军队,已经撑不起普京的野心这个世界真的是很反常。在俄乌开战之初,所以人都认为俄军会在战场上将乌克兰打的落花流水,然后在经济方面被西方制裁的奄奄一息但没曾想,半年时间过去,经济方面俄罗斯依然活蹦乱跳,却把西方
媒体人青岛外援多普里斯已经开始隔离有望月底会合球队直播吧9月17日讯据媒体人所罗门的臣仆报道,青岛外援多普里斯已经成功入境并开始隔离,有望月底会合球队。所罗门的臣仆原文如下青岛男篮外援,拥有南苏丹和澳大利亚双重国籍的内线球员多普里
家和万事兴黑塞说过一句富有哲理的话,有勇气承担命运这才是英雄好汉。这启发了我。家和万事兴的发生,到底需要如何做到,不家和万事兴的发生,又会如何产生。而这些并不是完全重要,更加重要的问题是,要
自带财气的10种花,客厅一放特高档,寓意好,健康又好养在家里面种一些花草是非常有雅兴的事,美化家里面的环境,点缀我们的生活。有些寓意较好的花还可以有招财,旺财,保平安的作用,而这些花在花卉市场上也是比较受欢迎的。今天我就给大家带来十种
月度经济观察8月全国服务业生产指数同比增长1。8央广网北京9月17日消息(记者唐婧)据中央广播电视总台经济之声天下财经报道,8月份,全国服务业生产指数同比增长1。8,增速水平比7月有所回升,现代服务业增长形势较好。国家统计局发布
安徽女孩穿露脐装遭大妈质疑,你不穿都可以,网评手不能伸得太长衣服是我们每个人都用到的必需品,对于衣服的由来,各个地方都有不同的说法,但是很多说法都能追溯到远古时期,所以说,衣服陪伴人类有多久?这个问题已经是不言而喻。衣服网络图片关于衣服,西