在Angular和Node.js中,可以使用以下代码示例来解决无法在退出时清除本地存储、会话存储和auth_token的问题:
Angular代码示例:
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class AuthService {
private localStorageKey = 'auth_token';
private sessionStorageKey = 'session_token';
// 存储token到本地存储
setAuthToken(token: string, rememberMe: boolean) {
if (rememberMe) {
localStorage.setItem(this.localStorageKey, token);
} else {
sessionStorage.setItem(this.sessionStorageKey, token);
}
}
// 获取token
getAuthToken(): string {
const localToken = localStorage.getItem(this.localStorageKey);
const sessionToken = sessionStorage.getItem(this.sessionStorageKey);
return localToken || sessionToken || '';
}
// 清除token
clearAuthToken() {
localStorage.removeItem(this.localStorageKey);
sessionStorage.removeItem(this.sessionStorageKey);
}
}
import { Component } from '@angular/core';
import { AuthService } from 'src/app/services/auth.service';
@Component({
selector: 'app-login',
templateUrl: './login.component.html',
styleUrls: ['./login.component.css']
})
export class LoginComponent {
rememberMe = false;
constructor(private authService: AuthService) {}
login() {
// 在登录成功后获取token
const token = 'your_auth_token';
this.authService.setAuthToken(token, this.rememberMe);
}
}
import { Component } from '@angular/core';
import { AuthService } from 'src/app/services/auth.service';
@Component({
selector: 'app-navbar',
templateUrl: './navbar.component.html',
styleUrls: ['./navbar.component.css']
})
export class NavbarComponent {
constructor(private authService: AuthService) {}
logout() {
// 在退出时清除token
this.authService.clearAuthToken();
}
}
Node.js代码示例:
const express = require('express');
const session = require('express-session');
const app = express();
app.use(session({
secret: 'your_secret_key',
resave: false,
saveUninitialized: true
}));
app.post('/login', (req, res) => {
// 在登录成功后存储auth_token到会话
const token = 'your_auth_token';
req.session.auth_token = token;
res.send('Login successful');
});
app.get('/logout', (req, res) => {
// 在退出时清除会话中的auth_token
req.session.destroy();
res.send('Logout successful');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
app.get('/protected', (req, res) => {
const auth_token = req.session.auth_token;
if (auth_token) {
// 执行受保护的操作
res.send('Protected data');
} else {
res.status(401).send('Unauthorized');
}
});
这些代码示例展示了如何在Angular和Node.js中管理本地存储、会话存储和auth_token,并在退出时进行清除。你可以根据你的具体需求进行适当的修改和调整。