Angular 2 验证状态

2024-06-21

我使用 Angular 2 实现了一个登录页面。登录后,我从服务器获取 jsonwebtoken、userId、userRole、userName。我将此信息存储在本地存储中,以便我可以随时访问它并在用户刷新页面时保持登录状态。

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';
  }

}

要检查登录状态,我只是检查本地存储中是否存在令牌。由于本地存储是可编辑的,因此只需在本地存储中添加任何令牌就会绕过登录页面。同样,如果客户端在本地存储中编辑用户角色,客户端可以轻松访问管理或用户页面。

我该如何解决这些问题?

这更像是一个普遍问题,我想知道网站如何维护登录状态?

附: NodeJS服务器端登录代码生成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


  1. 令牌应该是唯一的并且难以输入(因为长度很大)。此外,它们应该以一定的频率刷新。更好地阅读oAuth 文档 https://www.rfc-editor.org/rfc/rfc6749 on this

  2. 角色不应存储在客户端。仅检查服务器。 另外,使用 oAuth 时请考虑使用范围。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular 2 验证状态 的相关文章

随机推荐