401

来源:8-8 用 koa-jwt 中间件实现用户认证与授权

慕后端1189009

2021-05-06

确定后端能获取token,也已经登录了,但前端console报401,message是Not Found,视频重复看几遍了,完全是跟这些,麻烦老师帮看看吧,以下是代码:

const User = require(’…/models/users’);
const jwt = require(‘jsonwebtoken’);
const { secret } = require(’…/config’);

class UserCtrl {
async find(ctx) {
ctx.body = await User.find();
}
async findById(ctx) {
const { fields } = ctx.query;
const user = await User.findById(ctx.params.id);

    if(!user) {
        ctx.throw(404, '用户不存在');
    }
    ctx.body = user;
}
async create(ctx) {
    ctx.verifyParams({
        username: { type: 'string', required: true },
        password: { type: 'string', required: true }
    });
    const { username } = ctx.request.body;
    const repeatedUser = await User.findOne({ username });
    if(repeatedUser) {
        ctx.throw(409, '用户已经存在')
    }
    const user = await new User(ctx.request.body).save();
    ctx.body = user;
}
async checkOwner(ctx, next) {
    console.log('check')
    if(ctx.params.id !== ctx.state.user._id) {
        ctx.throw(403, '沒有權限');
    }
    await next();
}
async update(ctx) {
    console.log('update')
    ctx.verifyParams({
        username: { type: 'string', required: false },
        password: { type: 'string', required: false },
        avatar_url: { type: 'string', required: false },
        gender: { type: 'string', required: false },
        headline: { type: 'string', required: false },
        locations: { type: [{ type: String }] },
        business: { type: 'array', itemType: 'object', required: false },
        educations: { type: 'array', itemType: 'object', required: false },
    })
    const user = await User.findByIdAndUpdate(ctx.params.id, ctx.request.body)
    if(!user) {
        ctx.throw(404, '无此用户')
    }
    ctx.body = user
}
async delete(ctx) {
    ctx.status = 204
}
async login(ctx) {
    ctx.verifyParams({
        username: { type: 'string', required: true },
        password: { type: 'string', required: true }
    })
    
    const user = await User.findOne(ctx.request.body);
    if(!user) {
        ctx.throw(401, '用戶名或密碼不正確');
    }
    const { _id, username } = user;
    const token = jwt.sign({ _id, username}, secret, {expiresIn: '1d'});
    ctx.body = { token };
}

}

module.exports = new UserCtrl();

===================================

const Router = require(‘koa-router’);
const router = new Router({prefix: ‘/users’});
const { find, findById, create, delete:del, update, login, checkOwner } = require(’…/controllers/user’);
const jwt = require(‘koa-jwt’);
const { secret } = require(’…/config’);

const auth = jwt({
secret
});

router.get(’/’, find);
router.post(’/’, create);
router.get(’/:id’, findById);
router.patch(’/:id’, auth, checkOwner, update);
router.delete(’/:id’, auth, checkOwner, del);
router.post(’/login’, login);

module.exports = router;

写回答

3回答

慕后端1189009

提问者

2021-05-06

应该怎么设置啊,postman现在版本没有视频里选项

//img.mukewang.com/szimg/60939d8f0976fd9c07070412.jpg

0
0

慕后端1189009

提问者

2021-05-06

首先是登录:

//img.mukewang.com/szimg/60939b7c092a91e509460360.jpg


//img.mukewang.com/szimg/60939bb20933d6d109680608.jpg




接着是修改:

//img.mukewang.com/szimg/60939c51095f415709800453.jpg

//img.mukewang.com/szimg/60939c7309689c9009680655.jpg


postman版本不一样,所以没跟着用bear




0
0

lewis

2021-05-06

前端报401,是认证失败哦,你把postman 的header截图发我看下

0
9
lewis
回复
慕后端1189009
因为我们采用的是这个标准,我们也可以不加bear,但是服务端要跟着改,很麻烦,建议就按照这个标准吧,显得专业一点
2021-05-06
共9条回复

Node.js仿知乎服务端-深入理解RESTful API

Koa2+MongoDB+Postman+JWT+阿里云

952 学习 · 331 问题

查看课程

相似问题

token

回答 3