我无法使用angular,node(passport.js)和MongoDB执行身份验证。以下是详细代码:
角色部分:
login.component.html:
<form #loginForm="ngForm" (ngSubmit)="onSubmit(loginForm)">
<div class="form-group">
<label for="email">Email</label>
<input type="email" class="form-control" name="email" ngModel>
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" class="form-control" name="password" ngModel>
</div>
<div class="form-group">
<button type="submit">Submit</button>
</div>
</form>
login.component.ts:
import { Component } from '@angular/core';
import { FormBuilder, FormGroup, Validators, FormControl, FormArray } from
'@angular/forms';
import { HttpClient } from '@angular/common/http';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
constructor(private httpClient: HttpClient) {};
onSubmit(loginForm) {
console.log(loginForm.value);
let url = 'http://localhost:8080/login';
let data = JSON.stringify(loginForm.value);
this.httpClient.post(url, {data},{responseType:
'text'}).subscribe(res => console.log(res));
}
}
节点部分:
routes.js:
app.post('/login', passport.authenticate('local-login', {
successRedirect : '/profile',
failureRedirect : '/login',
}));
passport.js:
module.exports = function(passport) {
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
passport.use('local-login', new LocalStrategy({
usernameField : 'email',
passwordField : 'password',
passReqToCallback : true
},
function(req, email, password, done) {
console.log("entering function");
var newUser = new User();
User.findOne({ 'email' : email}, function(err, user) {
if (err) {
console.log(err);
return done(err);
}
if (!user || !newUser.validatePassword(password, user.password)) {
return done(null, false);
}
return done(null, user);
});
}));
};
问题是,即使我提供正确的凭据,它也会始终重定向到失败页面(登录页面)。
我希望在api调用之后,它不会访问passport.js文件以进行进一步的身份验证。
我没有在控制台中看到任何文字打印,正如我在passport.js中所给出的那样。
没有棱角分明,我已经检查过并且工作正常。但我需要将角度作为前端。
需要别人的帮助才能找到我错的地方以及如何实现这一目标。
提前致谢。