Ich habe eine Login-Seite mit Angular 2 implementiert. Nach dem Login bekomme ich jsonwebtoken, userId, userRole, userName vom Server. Ich speichere diese Informationen im lokalen Speicher, damit ich jederzeit darauf zugreifen und den Anmeldestatus beibehalten kann, wenn der Benutzer die Seite aktualisiert.Angular 2 authenticate state
AuthService.ts
import {Injectable} from "@angular/core";
@Injectable()
export class AuthService {
redirectUrl: string;
logout() {
localStorage.clear();
}
isLoggedIn() {
return localStorage.getItem('token') !== null;
}
isAdmin() {
return localStorage.getItem('role') === 'admin';
}
isUser() {
return localStorage.getItem('role') === 'user';
}
}
den Login-Status zu überprüfen, Ich überprüfe nur, wenn Token in localstorage existiert. Da der lokale Speicher editierbar ist, würde das Hinzufügen eines Tokens im lokalen Speicher die Anmeldeseite umgehen. Wenn der Client die Benutzerrolle im lokalen Speicher bearbeitet, kann der Client auf einfache Weise auf Admin- oder Benutzerseiten zugreifen.
Wie löse ich diese Probleme?
Dies ist eher ein allgemeines Problem, ich möchte wissen, wie Websites den Anmeldestatus beibehalten?
P.S. NodeJS Server-Seite Login-Code generieren jsonwebtoken
const jwt = require('jsonwebtoken');
const User = require('../models/User');
/**
* POST /login
* Sign in using username and password
*/
exports.postLogin = (req, res, next) => {
User.findOne({username: req.body.username})
.then(user=> {
if (!user) {
res.status(401);
throw new Error('Invalid username');
}
return user.comparePassword(req.body.password)
.then(isMatch=> {
if (isMatch != true) {
res.status(401);
throw new Error('Invalid password');
}
let token = jwt.sign({user: user}, process.env.JWT_SECRET, {
expiresIn: process.env.JWT_TIMEOUT
});
return res.status(200).json({
success: true,
token: token,
userId: user._id,
role:user.role,
name:user.name
});
});
})
.catch(err=>next(err));
};
-Danke