我想在节点 js 中验证我博客的评论部分
I want to authenticate my comment section of my blog in node js
我的评论部分在 post 下面。我唯一想知道的是如何验证评论页面。
例如,在 reddit 中,除非您登录,否则您将无法发表评论,对吗?那怎么做呢?我应该遵循什么步骤?是的,我知道如何进行身份验证,我正在使用护照 js 进行身份验证。我可以屏蔽我的页面内容和所有其他内容,但只有评论部分有问题。
收到获取 post 的请求和与之相关的评论后,检查用户是否已在请求 headers 中发送令牌。您可以对此使用简单的 if-else
块。如果您使用的是 session,请检查用户是否有活动的 session。因此,如果满足这些条件,查询评论文档并 return 它们作为响应,否则只是 return post.
在前端,如果从服务器收到的响应没有评论,评论是否为空(这实际上取决于您发送响应的方式),那么只显示一条消息,说明用户必须登录
编辑 1
在 request
object 中有 headers 并且您可以在这些 headers 中发送令牌并像这样访问它:
request.headers['your-token-name']
之后您将验证令牌并授予或拒绝访问内容。
现在假设访问被授予并解码,令牌保存在请求 object 中,例如在名为 decoded
的变量中。现在
route.get('/:postId?', async(req, res, next)=>{
//place the validate you postId format
try {
const post = await Posts.findOne({postId:req.params.postId})
if(!post)
return res.json({success:false, message:'Post not found'})
if(req.decoded !== undefined || req.decoded !== null){
const comments = await Comments.find({/*Your condition*/ })
return res.json({success:true, comments: comments, post:post})
}else{
return res.json({success:true, message:'Login to view the comments', post:post})
}
} catch (error) {
next(error)
}})
这是一段非常简单的代码,可以让您简单了解它在 express 后端中的工作原理。现在你还必须编写一个中间件来验证令牌。
在这种情况下,如果发送了令牌,则对其进行验证。如果有效则授予访问权限,否则 return 访问被拒绝。像这样
App.use(async (Request,Response,Next)=>{
try {
let sentToken = Request.headers['access-token'];
if(sentToken !== undefined && sentToken !== null){
Request.decoded = await verify(sentToken,'your secret key');
if(!isTokenValid(Request.decoded))
return Response.status(403).send({success:false, message:'Please Sign Up or login to continue'});
}
await Next();
} catch (error) {
return Next(error);
}});
我的评论部分在 post 下面。我唯一想知道的是如何验证评论页面。 例如,在 reddit 中,除非您登录,否则您将无法发表评论,对吗?那怎么做呢?我应该遵循什么步骤?是的,我知道如何进行身份验证,我正在使用护照 js 进行身份验证。我可以屏蔽我的页面内容和所有其他内容,但只有评论部分有问题。
收到获取 post 的请求和与之相关的评论后,检查用户是否已在请求 headers 中发送令牌。您可以对此使用简单的 if-else
块。如果您使用的是 session,请检查用户是否有活动的 session。因此,如果满足这些条件,查询评论文档并 return 它们作为响应,否则只是 return post.
在前端,如果从服务器收到的响应没有评论,评论是否为空(这实际上取决于您发送响应的方式),那么只显示一条消息,说明用户必须登录
编辑 1
在 request
object 中有 headers 并且您可以在这些 headers 中发送令牌并像这样访问它:
request.headers['your-token-name']
之后您将验证令牌并授予或拒绝访问内容。
现在假设访问被授予并解码,令牌保存在请求 object 中,例如在名为 decoded
的变量中。现在
route.get('/:postId?', async(req, res, next)=>{
//place the validate you postId format
try {
const post = await Posts.findOne({postId:req.params.postId})
if(!post)
return res.json({success:false, message:'Post not found'})
if(req.decoded !== undefined || req.decoded !== null){
const comments = await Comments.find({/*Your condition*/ })
return res.json({success:true, comments: comments, post:post})
}else{
return res.json({success:true, message:'Login to view the comments', post:post})
}
} catch (error) {
next(error)
}})
这是一段非常简单的代码,可以让您简单了解它在 express 后端中的工作原理。现在你还必须编写一个中间件来验证令牌。
在这种情况下,如果发送了令牌,则对其进行验证。如果有效则授予访问权限,否则 return 访问被拒绝。像这样
App.use(async (Request,Response,Next)=>{
try {
let sentToken = Request.headers['access-token'];
if(sentToken !== undefined && sentToken !== null){
Request.decoded = await verify(sentToken,'your secret key');
if(!isTokenValid(Request.decoded))
return Response.status(403).send({success:false, message:'Please Sign Up or login to continue'});
}
await Next();
} catch (error) {
return Next(error);
}});