Я создаю веб-приложение node.js с Angular. У которого есть метод входа в систему, когда я вхожу с правильным адресом электронной почты и паролем, это дает мне токен. но когда я указываю неверный адрес электронной почты или пароль, он показывает мне 401 (неавторизованный) ответ на метод сообщения.
Вот мой метод входа в систему в угловом виде:
userLogin(username: string, password: string){
const authData: AuthData = {
email: username,
password: password
}
this.http.post<{token: string}>("http://localhost:3000/api/user/login", authData)
.subscribe(response => {
const token = response.token;
this.token = token;
});
}
Метод сообщения Node.js:
router.post("/login", (req, res, next) => {
let fetchUser;
User.findOne({email: req.body.email})
.then(user => {
if(!user){
//console.log('user not found');
throw new Error("User profile not found");
}
fetchUser = user;
return bcrypt.compare(req.body.password,user.password);
})
.then(result => {
//console.log("Result " + result);
if(!result){
throw new Error("Password not match with user")
}
const token = jwt.sign(
{ email: fetchUser.email, userId: fetchUser._id},
"secret_key_should_be_longer",
{ expiresIn: "1h"});
//console.log("successfully log in");
res.status(200).json({
token: token
});
})
.catch(err => {
console.log("error occure !! " + err);
res.status(401).json({
message: err
}
);
});
Я также использовал перехватчик в angular, чтобы HTTPRequest использовал мой токен в другом сервисе.
export class AuthInterceptor implements HttpInterceptor{
constructor(private authService: AuthService) { }
intercept(req: HttpRequest<any>, next: HttpHandler) {
const authToken = this.authService.getToken();
const authRequest = req.clone({
headers: req.headers.set("Authorization", "Bearer " + authToken)
});
return next.handle(authRequest);
}