【问题标题】:How to send the JWT token to the client with feathersjs-authentication?如何使用 feathersjs-authentication 将 JWT 令牌发送给客户端?
【发布时间】:2016-10-04 00:18:20
【问题描述】:

我在我的 feathersjs REST-API 应用程序中使用 本地身份验证,但在用户通过身份验证后,而不是向我发送 身份验证令牌,feathers 正在发送以下 HTML 作为对身份验证请求的响应:

<body>
    <img class="logo" src="alongbase64string" alt="Feathers Logo">
    <main>
        <h1 class="center-text">Success</h1>
        <h3 class="center-text">You are now logged in. We've stored your JWT in a cookie with the name 
            <span class="italic">"feathers-jwt"</span> for you. It is:
        </h3>
        <pre id="token"></pre>
    </main>
    <script type="text/javascript">
function getCookie(name) {
  var value = "; " + document.cookie;
  var parts = value.split("; " + name + "=");
  if (parts.length == 2) return parts.pop().split(";").shift();
}

var token = getCookie('feathers-jwt');

var el = document.getElementById('token');
el.innerHTML = token;
</script>

打印以下页面:

我认为如果我从网页发送请求就足够了,但就我而言,我需要获取令牌,因为客户端是移动应用程序,而不是网络浏览器,所以 cookie 对我不起作用。

我可以让feathersjs 在响应中发送令牌吗?比如:

{
    token: 'açldkjfaçldkfjçasdkfjdçakfjd'
}

这样我可以将令牌存储在移动应用程序中,并使用它来验证对我的 feathersjs API 服务器的进一步请求

现在我不会在此处添加更多代码,因为该应用程序完全是使用 feathersjs 提供的控制台命令制作的,例如 feathers generate 但如果有人需要了解有关代码的更多信息,请告诉我,并且我将编辑问题以添加更多详细信息。

【问题讨论】:

  • 假设股票和according to the repo,令牌在标题中(req.headers['authorization'])。您是否尝试过使用基本的res.send(token) 来代替当前的res.sendFile({authpage}) 机制?
  • 是的,我试过了,但我找不到它在哪里向我发送文件,否则我会直接发送令牌,这已经足够了。还有,你传给我的链接是验证客户端发给服务端的token,但是我需要反过来,也就是需要把token从服务端发给客户端。
  • 很好,@colonelsanders!我有什么方法可以改变行为,而不是发送文件,而是发送实际的令牌?当然,编辑此文件不是一种选择……但是知道这是该文件已经使我处于更好的位置来获得解决方案。非常感谢。

标签: node.js rest authentication token feathersjs


【解决方案1】:

您必须确保将请求中的 Accept 标头设置为 application/json 否则它将假定为 HTML 并发送您所看到的页面。

【讨论】:

  • 不敢相信我错过了这个。有用!谢谢。
  • 您介意我问一个相关的问题吗?我想只返回用户的一些字段,而不是完整的模型属性。我认为这可以通过设置令牌身份验证对象的payload 数组来实现,但它不起作用;每个属性都会与令牌一起发送给客户端。我不知道我是否做错了什么,或者这是否真的是这样做的方式。
  • 看起来hooks 是我正在寻找的功能。但我不知道如何为authentication 服务添加挂钩。有没有办法做到这一点?
  • 是的,auth/local 只是另一项服务。您可以将beforeafter 挂钩添加到app.service('auth/local)
  • 是的,今天下午搞定了。这是我正在处理的第一个使用 feathersjs 的项目,所以我“按需”学习了很多东西,但我喜欢这个框架,我非常享受这个学习过程。感谢您的帮助和支持。
【解决方案2】:

使用本地中间件而不是问题中引用的套接字方案。

将登录数据发布到/auth/local 将产生

{
  "token": {JWT},
  "data": {
    "email": "admin@feathersjs.com",
    "id": 0
  }
}

您的客户端可以从该 JSON 响应中提取值并适当地处理它们。

除此之外的大部分内容都需要修改现有的 Feathers 演示。

【讨论】:

    猜你喜欢
    • 2020-11-22
    • 2021-01-28
    • 2018-04-24
    • 2019-11-23
    • 2020-01-31
    • 2021-08-12
    • 2019-04-23
    • 2018-03-19
    • 1970-01-01
    相关资源
    最近更新 更多