私はAngular 2を使ってログインページを実装しました。ログイン後、私はjsonwebtoken、userId、userRole、userNameをserverから取得します。この情報をlocalstorageに保存するので、いつでもアクセスでき、ユーザーがページを更新するとログイン状態を維持できます。角2の認証状態
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';
}
}
ログイン状態を確認するために、私はちょうどトークンがのlocalStorageに存在するかどうかをチェックしています。 localstorageは編集可能なので、localstorageにトークンを追加するだけでログインページを回避できます。同様に、クライアントがローカルストレージ内のユーザロールを編集する場合、クライアントは管理ページまたはユーザページに簡単にアクセスできます。
どのようにこれらの問題を解決しますか?
これは一般的な問題とよく似ていますが、ウェブサイトのログインステータスがどのように維持されているかを知りたいですか?
P.S. 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));
};
-Thanks