angularjs - 如何生成 JWT 并将其返回到我的应用程序 Angular、Node、Express

标签 angularjs node.js authentication

我正在为我的应用程序构建一些身份验证。现在,我正在发布到创建 JWT 的服务器。我将 token 发回,但我不知道如何捕获它。我在服务器上使用 Node/Express,在前端使用 Angular。这是端点和 Angular 函数。

app.post('/session', function (req, res, next){
        var username = req.body.username
        // validate password
        var token = jwt.encode({username: username}, secretKey)
        res.json(token)
    })

$scope.login = function (username, password) {
          console.log('submitting to server')
          var creds = {
            username: $scope.username,
            password: $scope.password
          }
          var token = $http.post('http://localhost:3002/session', creds)
          console.log(token)
        }

打印一个对象而不是 token 。我可以看到 token 正在正确生成,因为我能够将其打印到服务器的控制台并通过 postman 生成 token 。

最佳答案

给出更准确的答案...

你已经非常非常接近了,现在你已经

    var token = $http.post('http://localhost:3002/session', creds)

这不是将 token 设置为实际 token ,而是将 token 设置为 promise 。这很好,这就是您想做的事情。

但是,从那以后你必须兑现 promise ,你可以做到

    token.then(function(res){
      // res.data should contain your token
      console.log(res.data) 
    })

如前所述,但这里有一个更好的方法......

    var tokenReq = $http.post('http://localhost:3002/session', creds);

    tokenReq.success(function(data) {
      // This will fire when the request is successfull
      // data will contain the response, from there you could
      // find your token
      console.log(data);
    }

    tokentReq.error(function(data) {
      // This will fire if the request is not successfull
      console.log('Something went wrong!', data);
    }

非常巧妙地处理所有情况。

在谈论 .success 或 .error 等 Promise 时,总是让我感到困惑的一件事是,我总是问自己,“它到底是如何知道这是成功还是错误?”

这是由响应的状态码决定的,所以如果你将状态码设置为500、404之类的,就会触发.error、200等来触发.success。

编辑:还有一件事,看起来您可能没有发回正确的数据。我可能是错的,但我不认为你可以只在 res.json(token) 中发送 token ,我不认为它是有效的 JSON。我不想运行我的项目来测试,但这就是我所做的......

    var token = createToken(user);
    res.json({
      token: token,
      userData: user
    });

关于angularjs - 如何生成 JWT 并将其返回到我的应用程序 Angular、Node、Express,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28356987/

相关文章:

java - 不会抛出Java代理身份验证IOException

ios - UIAlertView 在调用 loginButton 操作后出现太短

javascript - 鼠标悬停元素无法使用 Protractor 工作

javascript - 从指令访问 Controller 功能

javascript - 从 Controller 模块调用 angularjs 工厂模块

javascript - 如何检查/迭代 Node 中的对象?

node.js - SocketIO + Node - 恢复丢失的连接

javascript - Commander.js 在没有命令的情况下调用时显示帮助

c# - 登录安全 : How to Disable Multiple login

javascript - TypeScript - 导入外部 npm 模块会导致 tsc 的输出文件夹发生更改