Я пробовал много методов, и использование промежуточного программного обеспечения Passport помогло мне справиться с этой задачей.Я думаю, что я пропускаю какой-то последний шаг для того, чтобы это работало правильно, у меня сейчас нет ошибок.Вот мой код:
У меня есть login.component.html
<form method="POST" action="login">
Username: <input type="text" name="username" required>
Password: <input type="text" name="password" required>
<input type="submit" value="Submit">
</form>
Модель пользователя:
var mongoose = require('mongoose');
const express = require('express');
const bodyParser = require('body-parser');
var app = express();
const Schema = mongoose.Schema;
let user = new Schema({
username: String,
password: String
});
const User = module.exports = mongoose.model('User', user);
Маршрут пользователя:
const express = require('express');
const router = express.Router();
const passport = require('passport');
let User = require('../models/user');
//Login form
router.get('/login', function(req, res)
{
res.render('login');
})
//Login process
router.post('/login', function(req, res, next)
{
passport.authenticate('local',
{
successRedirect: '/admin',
failureRedirect: '/login',
failureFlash: true
})(req,res,next);
});
module.exports = router;
Passport.js
const LocalStrategy = require('passport-local').Strategy;
const User = require('../models/user');
const config = require('../config/db');
const bcrypt = require('bcryptjs');
module.exports = function(passport)
{
passport.use(new LocalStrategy(function(username, password, done)
{
let query = {username:username};
User.findOne(query, function(err, User)
{
if(err) throw err;
if(!User)
{
return done(null, false, {message: 'No user found'});
}
bcrypt.compare(password, User.password, function(err, isMatch)
{
if(err) throw err;
if(isMatch)
{
return done(null, User);
}
else
{
return done(null, false, {message: 'Wrong pass'});
}
});
});
}));
passport.serializeUser(function(User,done)
{
done(null, User.id);
});
passport.deserializeUser(function(id, done)
{
User.findById(id, function(err, User)
{
done(err, User);
});
});
}
Я работал над этим часами, но безрезультатно.Было бы здорово, если бы кто-нибудь мог мне помочь или указать мне на мои следующие шаги, чтобы это тоже работало должным образом.
Я чувствую, что что-то упустил, но не уверен, что.Я не изменил какой-либо код внутри своего login.component.ts, это может быть причиной того, что код не делает то, что я хочу.
Вот login.component.ts:
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
@Component({
selector: 'app-login',
templateUrl: './login.component.html',
styleUrls: ['./login.component.css']
})
export class LoginComponent implements OnInit {
constructor(private router: Router, ) {
}
ngOnInit() {
}
}