验证const String加上任何变量文本



我在nodejs中使用一个中间件来验证路由是否与'login'或' signing '不同,但我还需要验证它是否与激活路由加上我的令牌('/api/activation/+token')不同,也就是说,我有以下内容:

If(req.path ¡= '/api/login'  && req.path != '/api/signin'){
//execute verification middleware
}else{
//allow access to the route
//exclude verification
}

所以我还需要从验证中排除激活路径和令牌。它的工作方式如下:

//(assuming eyJajau is my token)
If(req.path ¡= '/api/login'  && req.path != '/api/signin' && req.path != '/api/activate/eyJajau'){
//execute middleware
} else{
//allow access to the route
}

但问题是令牌每次都改变,所以我需要我的'if'语句验证字符串是否与我的路径加上任何单词不同,它将是这样的:

/api/activation/  +  any word and number

换句话说,每一个包含'/api/active/'的Sting,然后应该到"声明我想它可能是用正则表达式,但我不知道如何。

所以我需要的是验证请求。路径与激活路径加任何Sting不同。

要排除/api/activation/后面跟着任何字符或数字的请求,可以使用以下正则表达式://api/activate/w+/。我还将反转逻辑,因此您的代码可能看起来像:

if (req.path === '/api/login' ||
req.path === '/api/signin' ||
//api/activate/w+/.test(req.path) {
// allow access
} else {
// validate/verificate request
}

使用正则表达式&确保在开始和结束处锚定:

If( req.path === '/api/login'
|| req.path === '/api/signin'
|| req.path.match(/^/api/activate/w+$/)
) {
// allow access to the route
} else{
// execute middleware to authenticate or verify user
}

如果你愿意,你可以将它缩短为一个单独的正则表达式来检查路径:

If(path.match(/^/api/(login|signin|activate/w+)$/)) {
// allow access to the route
} else{
// execute middleware to authenticate or verify user
}

我不知道这是否是最好的方式,但我找到了解决我的问题,使用子字符串。如下:

if( req.path != '/api/login' && req.path != '/api/signin' && req.path.substring(0,21) != '/api/activateaccount/' ){
//validate verificate reques
}else{
//allow access
}

你觉得怎么样?

最新更新