如何解决为什么我的 cookie 没有保存在浏览器中?
当我从 router.post("/signin",async (req,res)
运行 auth.js
时,cookie 没有保存在我的本地主机中。
这是index.js
const express = require("express");
const dotenv = require("dotenv");
const mongoose = require("mongoose");
const cors = require("cors");
const { google } = require("googleapis");
const cookieParser= require('cookie-parser');
const app = express();
app.use(cors());
app.use(express.json());
const passport = require("passport");
dotenv.config({ path: "./config.env" });
const db = require("./db/connection");
app.use(require('./router/auth'));
const User= require("./UserSchema/Schma")
const messages=require("./sendMessage/message");
// messages()
// .then((e)=>{console.log(e)})
app.use(cookieParser());
app.listen(3001,(req,res) => {
console.log(`server running at port no 3001`);
});
这是auth.js
const express = require("express");
const router = express.Router();
const bcrypt = require('bcryptjs');
const jwt= require('jsonwebtoken');
const User = require("../UserSchema/Schma");
const cookieParser = require("cookie-parser");
const authenticate = require('../middleware/authenticate');
let token;
router.post("/signin",res) => {
console.log(req.body);
// res.cookie("raushan","raushan");
try {
const { email,password } = req.body;
if (!email || !password) {
return res.json({ error: "invalid credentials you added " });
}
const details = await User.findOne({ email: email });
console.log(details);
if (!details) {
return res.json({ error: "users error" });
}
else
{
const isMatch = await bcrypt.compare(password,details.password);
console.log(isMatch);
token= await details.generateAuthToken();
console.log(token);
res.cookie("jwtoken",token,{
expiresIn:"1h",httpOnly:true,secure:true
}
);
if (!isMatch) {
return res.status(400).json({ error: "invalid credientials" });
} else {
return res.json({ message: "user signin successfully" });
}
}
}
catch {
console.log("something going bad");
res.status(400).json({ error: "sorry something missing" })
}
});
module.exports = router;
和这个 Schema.js
以及这个 generateAuthToken()
函数内
const mongoose = require("mongoose");
const bcrypt = require("bcryptjs");
const jwt= require("jsonwebtoken");
const userSchema = new mongoose.Schema({
name: {
type: String,require:true,},email: {
type: String,phone :{
type:Number,work:{
type:String,password:{
type:String,cpassword:{
type:String,tokens:[{
token:{
type:String,}
}]
});
userSchema.pre('save',async function(next) {
if(this.isModified('password'))
{
this.password=await bcrypt.hash(this.password,12);
this.cpassword=await bcrypt.hash(this.cpassword,12);
}
next();
})
userSchema.methods.generateAuthToken= async function(){
try {
let token= jwt.sign({_id:this._id},process.env.SECRET_KEY);
this.tokens=this.tokens.concat({token:token});
await this.save();
return token;
} catch (error) {
console.log(err);
}
}
const User = mongoose.model("USER",userSchema);
module.exports = User;
我从前两天开始尝试,但直到现在我还没有得到任何解决方案,请帮忙。
解决方法
由于 auth.js 中的 secure
标志,它不起作用:
res.cookie("jwtoken",token,{
expiresIn:"1h",httpOnly:true,secure:true
}
);
这是一个很好的安全实践,但它在 localhost 上不起作用,因为它不是通过 HTTPS。您需要:
- 禁用
secure
标志仅用于开发,或 - 启用 https 并使用自签名证书进行本地主机开发,或
- 使用 TLS 终止代理,例如 haproxy
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。