Я пытаюсь реализовать аутентификацию passport-jwt, но я всегда получаю 401 Unauthorized при попытке вызвать конечную точку - PullRequest
0 голосов
/ 19 октября 2019

These are passport strategys. I think the problem is right here

`Здравствуйте, я пытался реализовать passport-jwt в моем веб-приложении. Но это не сработает. Я видел несколько одинаковых постов и пробовал то, что они делали, но в моем случае это не сработало.

Вот некоторые API-интерфейсы узла аутентификации с passport-jwt

локальная стратегия для паспорта не вызывается

Passport-jwt Unauthorized

Я пробовал их, но это не сработало. Вот мой код в моем passport.js`

    import User from "../models/User";
    import passport from 'passport';
    const JWTSTrategy = require('passport-jwt').Strategy
    import { ExtractJwt } from "passport-jwt";

    const LocalStrategy = require('passport-local').Strategy;

    const localLogin = new LocalStrategy({
        usernameField: 'email',
        passwordField: 'password',
        session: false,
    }, async (email:any, password:any, done:any) => {
        const user = await User.findOne({email: email})
        if(!user) {
            return done(null, false, { message: 'Not user found' })
        } else {
            const match = await user.matchPassword(password);
            if(match) {
                return done(null, user)
            } else {
                return done(null, false, { message: 'incorrect password' })
            }
        }
    });

    const loginJWT = new JWTSTrategy({
        jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
        secretOrKey: `${process.env.TOKEN_SECRET}`
    },
    async (payload: any, done: any) => {
        console.log(payload)
        try {

            const user = await User.findById({_id: payload._id});
            if(!user) {
                return done(null, false, { message: 'user not found' })
            }

            done(null, user)
        } catch(err) {
            done(err, false, { message: "something was wrong" })
        }
    }
    )

    passport.use(loginJWT); passport.use(localLogin);

    export const authLocal = passport.authenticate('local', { session: false }); export const authJwt = passport.authenticate('jwt', { session: false });

Я думаю, что здесь что-то не так

это маршруты

import { Router } from "express"
import { registerUser, loginUser } from "../controllers/auth.control"
import post from "../controllers/post.control"
import verify from "../controllers/verify.control"
import verifyToken from "../middlewares/verify-token"
import { authJwt, authLocal } from "../middlewares/passport";
const router = Router()


router.route('/post')
.get(post)

router.route('/register')
.post(registerUser)

router.route('/login')
.post(loginUser)

router.route('/profile').get(authJwt,
    function(req:any, res: any) {
        res.send(req.user)
    })


export default router
...