express-jwt 的任何完整示例? [关闭]
Posted
技术标签:
【中文标题】express-jwt 的任何完整示例? [关闭]【英文标题】:Any complete example for express-jwt? [closed] 【发布时间】:2018-03-04 00:03:43 【问题描述】:我想在我的 express 节点应用程序中使用 express-jwt,但我找不到任何演示登录部分的示例。
有什么帮助吗?
【问题讨论】:
感谢 Suhail 为我进行了谷歌搜索。 :) 如果您查看第一个示例,则没有使用 express-jwt。在第二个中,我找不到该过程中最重要的部分:登录。在这里发布问题之前,我已经看到了这些链接。 Suhail 给你发了很好的例子,足以试试 jwt。或者,也许你没有完全描述你的目的。在常见情况下,用户发出登录/登录请求,服务器检查凭据(例如电子邮件、密码)并发送回客户端 jwt-token。然后每次登录的客户端想要获取一些受保护的数据时,他需要为每个请求添加这个令牌(例如在标头中) 虽然这个问题不是 SO 的主题,但很遗憾没有一个好的答案,因为express-jwt
的示例几乎无用。
【参考方案1】:
我建议您尝试了解 JWT 的原理以及它们如何在服务器和客户端之间传递,以及如何在服务器端匹配一个秘密 - 这里是 doc
有效负载可以是任意用户数据 - 即:只是一个用户名或 id
基本上,您需要一个服务,该服务在成功验证时生成令牌(当用户使用正确的凭据登录时,即:usr & pwd)并创建一个带有令牌的附加标头,以用于对服务器的进一步请求。
对于jwt-express,您显然需要安装包(与 jsonwebtoken 相同),例如:
npm install jwt-express --save
然后像这样初始化它:
var jwt = require('jwt-express');
app.use(jwt.init('secret'));
来自文档:
jwt.init() 函数为 Express 返回一个中间件函数,所以 它必须在 app.use() 中调用。它会自动读入 来自 cookie 或 Authorization 标头的 JWT(由 你)并向请求对象(req)添加一个 JWT 对象。它还将 将 jwt() 方法添加到 Response 对象 (res) 以创建/存储 智威汤逊。 jwt.init() 必须在任何其他 jwt 方法之前调用。
这些是你的选择:
cookie:(字符串)cookie的名称(默认:'jwt-express') cookieOptions:(对象)存储cookie时使用的选项(默认:httpOnly: true) cookies: (boolean) 如果为true,将使用cookies,否则将使用授权标头(默认:true) refresh: (boolean) 指示是否应在每次请求时刷新和存储 JWT(默认值:true) reqProperty: (string) 要填充的 req 的属性(默认值:'jwt') revoke: (function) jwt.revoke() 会调用这个函数(默认:function(jwt) ) signOptions:(对象)签署 JWT 时使用的选项(默认值:) stales:(数字)jwt 过时的毫秒数(默认值:900000(15 分钟)) 验证:(功能)附加验证。必须返回一个布尔值(默认:function(jwt) return true) verifyOptions:(对象)验证 JWT 时使用的选项(默认值:)其余的逻辑由您自己编写代码,但我的示例应该让您大致了解如何在应用程序中管理 jwt..
这是我如何通过 jsonwebtoken 实现 jwt 的示例:
// INFO: Function to create headers, add token, to be used in HTTP requests
createAuthenticationHeaders()
this.loadToken(); // INFO: Get token so it can be attached to headers
// INFO: Headers configuration options
this.options = new RequestOptions(
headers: new Headers(
'Content-Type': 'application/json', // INFO: Format set to JSON
'authorization': this.authToken // INFO: Attach token
)
);
// INFO: Function to get token from client local storage
loadToken()
this.authToken = localStorage.getItem('token');; // Get token and assign to variable to be used elsewhere
以及一些存储用户状态的功能,即:
// INFO: Function to store user's data in client local storage
storeUserData(token, user)
localStorage.setItem('token', token); // INFO: Set token in local storage
localStorage.setItem('user', JSON.stringify(user)); // INFO: Set user in local
storage as string
this.authToken = token; // INFO: Assign token to be used elsewhere
this.user = user; // INFO: Set user to be used elsewhere
还有一个注销功能来销毁本地存储中的令牌,即:
// INFO: Function for logging out
logout()
this.authToken = null; // INFO: Set token to null
this.user = null; // INFO: Set user to null
localStorage.clear(); // INFO: Clear local storage
如果你使用npm的jsonwebtoken,你可以在生成token的时候设置token的ttl:
const token = jwt.sign( id: idDB , "secret", expiresIn: '24h' );
或任何你想要的 ttl,字符串“secret”指的是与服务器匹配的秘密。
【讨论】:
这是我的工作救星,谢谢 @princebillyGK 欢迎你 ;) 标记为 express-jwt 的 jwt-express 链接有些误导。 谢谢你的提示,@WillSadler - 我会立即纠正;)以上是关于express-jwt 的任何完整示例? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
带有路线或导航的 react-native-side-menu 的完整工作示例 [关闭]