Node.js 如何在本地存储器(或cookie)中保存令牌?
我正在尝试在应用程序中实现登录功能。目前,我可以注册一个登录名,生成一个jwt令牌。但是,我不知道如何将此令牌存储在cookie(或本地存储)中。我有一个中间件,需要用户在每个私有请求中发送令牌。在《邮递员》中,我可以将“x-auth-token”和一个token放在标题中。许多教程使用passport,cookie解析器,这看起来有点复杂。还有其他更简单的方法吗?我在express文档中看到有Node.js 如何在本地存储器(或cookie)中保存令牌?,node.js,express,jwt,express-jwt,Node.js,Express,Jwt,Express Jwt,我正在尝试在应用程序中实现登录功能。目前,我可以注册一个登录名,生成一个jwt令牌。但是,我不知道如何将此令牌存储在cookie(或本地存储)中。我有一个中间件,需要用户在每个私有请求中发送令牌。在《邮递员》中,我可以将“x-auth-token”和一个token放在标题中。许多教程使用passport,cookie解析器,这看起来有点复杂。还有其他更简单的方法吗?我在express文档中看到有res.cookie('x-auth-token',token)也可用,我试过了,但没用。我还尝试了w
res.cookie('x-auth-token',token)代码>也可用,我试过了,但没用。我还尝试了window.localStorage.setItem('x-auth-token',token)代码>,仍然不起作用
我尝试了一些非常简单的方法,就是简单地将令牌放入本地存储<代码>window.localStorage.setItem('x-auth-token',token)但是,它不起作用
认证
posts.js
// @ route POST api/users
// @desc Register User
// @access Public
router.post(
'/',
[
check('name', 'Name is required')
.not()
.isEmpty(),
check('email', 'Please include a valid email').isEmail(),
check(
'password',
' Please enter a password with 6 or more characters'
).isLength({ min: 6 })
],
async (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({
errors: errors.array()
});
}
const { name, email, password } = req.body;
try {
// See if user exists, have to be unique
let user = await User.findOne({ email });
if (user) {
return res
.status(400)
.json({ errors: [{ msg: 'User already exists' }] });
}
// Get users gravatar
const avatar = gravatar.url(email, {
s: '200',
r: 'pg',
d: 'mm'
});
user = new User({
name,
email,
avatar,
password
});
//encrypt password
const salt = await bcrypt.genSalt(10);
user.password = await bcrypt.hash(password, salt);
// anything that return a promise, we have to put await !!
await user.save();
//return jsonwebtoken
const payload = {
user: {
id: user.id
}
};
jwt.sign(
payload,
config.get('jwtSecret'),
{ expiresIn: 60 * 60 * 100 },
(err, token) => {
// window.localStorage.setItem('x-auth-token', token);
res.json({ token });
res.cookie('x-auth-token', token);
// req.flash('You seccessfully registered your account');
// res.redirect('/user/login');
}
);
} catch (err) {
console.error(err.message);
res.status(500).send('Server error');
}
}
);
主把手
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="/css/register.css">
<link href="https://fonts.googleapis.com/css?family=Roboto&display=swap" rel="stylesheet">
<script src="https://use.fontawesome.com/804afe4c6e.js"></script>
{{!-- for auto-reload --}}
<script src="/reload/reload.js"></script>
<script src="/javascript/main.js"></script>
<title>Idea Share</title>
</head>
<body>
<nav class="navbar bg-dark">
<h1><a href="/">Idea Share</a></h1>
<ul>
<a href="/signup">
<li>Sign up</li>
</a>
<a href="/signup">
<li>Log in</li>
</a>
</ul>
</nav>
<div class="container">
{{{body}}}
</div>
</body>
</html>
<div class="height-container">
<div class="vertical-align">
<div class="register-form">
<h1>Create your account</h1>
<form class="form" action="/api/users" method="post">
<div class="form-group">
<input name="name" type="text" placeholder="Name" requried>
</div>
<div class="form-group">
<input name="email" type="email" placeholder="E-mail">
</div>
<div class="form-group">
<input name="password" type="text" placeholder="Password" minlength="6">
</div>
<input onclick="loginUser()" type="submit" value="Create account" class="button green-button" />
</form>
<p>Already have an account? <a href="/signin">Sign in</a></p>
</div>
</div>
</div>
<div class="height-container">
<div class="vertical-align">
<div class="idea-form">
<h1>Share your idea</h1>
<form class="form" action="/api/posts" method="post">
<div class="form-group">
<input type="text" placeholder="What is your idea?" name="title" requried>
</div>
<div class="form-group">
<input type="text" placeholder="Let us know more detail. What is the story. How did you come up with it?
Why do you think people would need it etc" name="body">
</div>
<input "type=" submit" value="Post" class="button green-button" />
</form>
</div>
</div>
</div>
{{!---用于自动重新加载--}
想法分享
{{{body}}}
把手
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="/css/register.css">
<link href="https://fonts.googleapis.com/css?family=Roboto&display=swap" rel="stylesheet">
<script src="https://use.fontawesome.com/804afe4c6e.js"></script>
{{!-- for auto-reload --}}
<script src="/reload/reload.js"></script>
<script src="/javascript/main.js"></script>
<title>Idea Share</title>
</head>
<body>
<nav class="navbar bg-dark">
<h1><a href="/">Idea Share</a></h1>
<ul>
<a href="/signup">
<li>Sign up</li>
</a>
<a href="/signup">
<li>Log in</li>
</a>
</ul>
</nav>
<div class="container">
{{{body}}}
</div>
</body>
</html>
<div class="height-container">
<div class="vertical-align">
<div class="register-form">
<h1>Create your account</h1>
<form class="form" action="/api/users" method="post">
<div class="form-group">
<input name="name" type="text" placeholder="Name" requried>
</div>
<div class="form-group">
<input name="email" type="email" placeholder="E-mail">
</div>
<div class="form-group">
<input name="password" type="text" placeholder="Password" minlength="6">
</div>
<input onclick="loginUser()" type="submit" value="Create account" class="button green-button" />
</form>
<p>Already have an account? <a href="/signin">Sign in</a></p>
</div>
</div>
</div>
<div class="height-container">
<div class="vertical-align">
<div class="idea-form">
<h1>Share your idea</h1>
<form class="form" action="/api/posts" method="post">
<div class="form-group">
<input type="text" placeholder="What is your idea?" name="title" requried>
</div>
<div class="form-group">
<input type="text" placeholder="Let us know more detail. What is the story. How did you come up with it?
Why do you think people would need it etc" name="body">
</div>
<input "type=" submit" value="Post" class="button green-button" />
</form>
</div>
</div>
</div>
创建您的帐户
已经有账户了吗
后把手
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="/css/register.css">
<link href="https://fonts.googleapis.com/css?family=Roboto&display=swap" rel="stylesheet">
<script src="https://use.fontawesome.com/804afe4c6e.js"></script>
{{!-- for auto-reload --}}
<script src="/reload/reload.js"></script>
<script src="/javascript/main.js"></script>
<title>Idea Share</title>
</head>
<body>
<nav class="navbar bg-dark">
<h1><a href="/">Idea Share</a></h1>
<ul>
<a href="/signup">
<li>Sign up</li>
</a>
<a href="/signup">
<li>Log in</li>
</a>
</ul>
</nav>
<div class="container">
{{{body}}}
</div>
</body>
</html>
<div class="height-container">
<div class="vertical-align">
<div class="register-form">
<h1>Create your account</h1>
<form class="form" action="/api/users" method="post">
<div class="form-group">
<input name="name" type="text" placeholder="Name" requried>
</div>
<div class="form-group">
<input name="email" type="email" placeholder="E-mail">
</div>
<div class="form-group">
<input name="password" type="text" placeholder="Password" minlength="6">
</div>
<input onclick="loginUser()" type="submit" value="Create account" class="button green-button" />
</form>
<p>Already have an account? <a href="/signin">Sign in</a></p>
</div>
</div>
</div>
<div class="height-container">
<div class="vertical-align">
<div class="idea-form">
<h1>Share your idea</h1>
<form class="form" action="/api/posts" method="post">
<div class="form-group">
<input type="text" placeholder="What is your idea?" name="title" requried>
</div>
<div class="form-group">
<input type="text" placeholder="Let us know more detail. What is the story. How did you come up with it?
Why do you think people would need it etc" name="body">
</div>
<input "type=" submit" value="Post" class="button green-button" />
</form>
</div>
</div>
</div>
分享你的想法
无法将项目保存到nodejs中的localstorage。首先将响应发送到客户端,并使用localStorage.setItem('x-auth-token',token)将res令牌保存到浏览器本地存储代码>
在客户端,将您的令牌用作:-
http.post('/', userCredentials).then(response => {
window.localStorage.setItem('x-auth-token', response.token)
}
);
无法将项目保存到nodejs中的localstorage。首先将响应发送到客户端,并使用localStorage.setItem('x-auth-token',token)将res令牌保存到浏览器本地存储代码>
在客户端,将您的令牌用作:-
http.post('/', userCredentials).then(response => {
window.localStorage.setItem('x-auth-token', response.token)
}
);
您正在节点JS上执行上述代码。节点没有windows对象。localStorage在窗口对象中定义。您必须从客户端设置令牌。如果您想在Cookie中存储令牌,那么您可以从NodeJS进行设置您正在节点JS上执行上述代码。节点没有windows对象。localStorage在窗口对象中定义。你必须从客户端设置令牌。如果你想在cookies中存储令牌,那么你可以从nodejst设置令牌谢谢你的回答,但是你能更清楚地解释一下吗?我尝试创建一个提交按钮来触发包含上述代码的事件处理程序,但出现引用错误:未定义http
。在表单中的register submit(注册提交)按钮上,我输入了
。然后对于main.js(客户端javascript),我添加了您的代码,比如function logiuser(){http.post('/',userCredentials)。然后(response=>{window.localStorage.setItem('x-auth-token',response.token);}
您能用一些客户端代码更新这个问题吗?你也在使用客户端框架吗?当然,我会更新的。客户端框架?我使用的是把手,是其中之一吗?我没有使用过把手,但尝试包括这个var http=require('http')代码>在脚本中?你是说前端脚本?但是不需要节点语法吗?谢谢你的回答,但是你能更清楚地解释一下吗?我尝试创建一个提交按钮来触发包含上述代码的事件处理程序,但出现引用错误:未定义http
。在表单中的register submit(注册提交)按钮上,我输入了
。然后对于main.js(客户端javascript),我添加了您的代码,比如function logiuser(){http.post('/',userCredentials)。然后(response=>{window.localStorage.setItem('x-auth-token',response.token);}
您能用一些客户端代码更新这个问题吗?你也在使用客户端框架吗?当然,我会更新的。客户端框架?我使用的是把手,是其中之一吗?我没有使用过把手,但尝试包括这个var http=require('http')代码>在脚本中?你是说前端脚本?但是不需要节点语法吗?