【问题标题】:Authorization problem with rest api node.jsrest api node.js 的授权问题
【发布时间】:2019-08-19 21:19:30
【问题描述】:

我有 node.js 包,它在 ubuntu 中使用了 rest api。当我登录时,这个服务器(节点包)在 json 正文中给了我一个令牌。所以当我想在服务器中做某事(任何请求)时,我正在使用这个令牌。但是,当我尝试将服务器提供的令牌与登录名和客户端发送到服务器的令牌进行比较时出现错误。

从服务器获取令牌的代码:

router.post('/login',(req,res)=>{ 
    const name = req.body.name;
    const password = req.body.password;
    console.log("Login request by "+name+" with password: "+password);
    if(name == "asdasd" && password == "asdadsad"){
      console.log("Auth succesful");
      const token = jwt.sign(
        {
          user: name,
          password: password
        },
        process.env.JWT_KEY,
        {
          expiresIn: "1h"
        }
      )
      return res.status(200).json({
        message:"Auth succesful",
        token: token
      });
    }else {
      return res.status(401).json({
        message:"Auth failed :("
      })
    }
})

使用给定令牌发出请求的代码:

router.post('/add',checkAuth,(req,res,next)=>{ 
    console.log('haha');
    const { 
        fname, mname, lname, birthdate, created, updated, sex, place, title_id
        } = req.body
    pool.query(`INSERT INTO users (
        fname, mname, lname, birthdate, created, updated, sex, place, title_id
        ) VALUES ($1, $2,$3, $4,$5, $6,$7, $8,$9)`, [
        fname, mname, lname, birthdate, created, updated, sex, place, title_id
        ], (error, result) => {
      if (error) {throw error}
      res.status(201).send(`User added with ID: ${result.insertId}`)
    })
})

上面提到的checkAuth代码:

const jwt = require('jsonwebtoken')

module.exports = (req,res,next) =>{
    try{
        const decoded = jwt.verify(req.headers.authorization, process.env.JWT_KEY);
        req.userData = decoded;
        next();
    }catch (error) {
        return res.status(401).json({
            message: "Auth failed"
        });
    }
}

nodemon.json 文件:

{
    "env": {
        "JWT_KEY": "secret"
    }
}

这是我使用 postman 或 android studio 连接到服务器时收到的来自服务器的 json 响应:

{
    "message": "Auth failed"
}

这是 consol.log(process.env); 的结果

Object {ALLUSERSPROFILE: "C:\ProgramData", AMD_ENTRYPOINT: "vs/workbench/services/extensions/node/extensionHos…", APPDATA: "C:\Users\aydogan\AppData\Roaming", APPLICATION_INSIGHTS_NO_DIAGNOSTIC_CHANNEL: "true", CommonProgramFiles: "C:\Program Files\Common Files", …}
check-auth.js:6
[[StableObjectId]]:2
ALLUSERSPROFILE:"C:\ProgramData"
AMD_ENTRYPOINT:"vs/workbench/services/extensions/node/extensionHostProcess"
APPDATA:"C:\Users\aydogan\AppData\Roaming"
APPLICATION_INSIGHTS_NO_DIAGNOSTIC_CHANNEL:"true"
CommonProgramFiles:"C:\Program Files\Common Files"
CommonProgramFiles(x86):"C:\Program Files (x86)\Common Files"
CommonProgramW6432:"C:\Program Files\Common Files"
COMPUTERNAME:"AYDOGAN"
ComSpec:"C:\WINDOWS\system32\cmd.exe"
DriverData:"C:\Windows\System32\Drivers\DriverData"
FPS_BROWSER_APP_PROFILE_STRING:"Internet Explorer"
FPS_BROWSER_USER_PROFILE_STRING:"Default"
HOMEDRIVE:"C:"
HOMEPATH:"\Users\aydogan"
IntelliJ IDEA:"C:\Program Files\JetBrains\IntelliJ IDEA 2018.3.5\bin;"
LOCALAPPDATA:"C:\Users\aydogan\AppData\Local"
LOGONSERVER:"\\AYDOGAN"
NUMBER_OF_PROCESSORS:"8"
OneDrive:"C:\Users\aydogan\OneDrive"
OneDriveConsumer:"C:\Users\aydogan\OneDrive"

JWT_KEY 似乎未定义,我可以通过调试看到它。

感谢您的帮助

【问题讨论】:

  • 你也使用 Express.js 吗?你也可以分享你的主js文件
  • 检查 `process.env` 控制台是什么样子的。并且 nodemon 配置文件不应该是 nodemon.json
  • 我不使用 Express.js。它已经是 nodemon.json,很抱歉给您带来不便,我将 process.env 添加到 @ambianBeing 上方。非常感谢您的帮助。
  • 它是通过邮递员工作的吗??
  • 只有 chechAuth 有问题。所有其他(我没有分享的)通过 Postman 和 Android Studio 和 React.js 运行良好。 @sultania23 chechAuth 也在工作,但完全错误

标签: node.js rest postman


【解决方案1】:

您想通过“process.env”从环境中获取 JWT_KEY,但您没有为 JWT_KEY 设置任何环境变量。

您需要在项目的根目录中创建 .env 文件,并将 JWT_KEY 像 JWT_KEY=****** 那样放在那里而不是 nodemon.js 文件,还需要通过 npm install dotenv 安装 dotenv 包并在你的主文件中使用它作为

index.js

// Read Environment Variables Config
const dotenv = require('dotenv');
dotenv.config();

...

.env

JWT_KEY=23489sgher8t238ifjk

这样你就可以通过 process.env 获取 JWT_KEY。此外,如果 repo 是公开的,我建议不要将 .env 文件推送到存储库并将其保留在本地以保护 jwt 密钥。

【讨论】:

    猜你喜欢
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多