我想在节点 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);
}});