使用angular和passport.js进行用户身份验证

时间:2018-04-07 05:18:09

标签: node.js angular

我无法使用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中所给出的那样。

没有棱角分明,我已经检查过并且工作正常。但我需要将角度作为前端。

需要别人的帮助才能找到我错的地方以及如何实现这一目标。

提前致谢。

0 个答案:

没有答案