要构建一个基于 Golang 后端和 Angular 前端的 Web 应用程序,我们首先需要定义应用程序的基本结构、安全性和数据模型。以下是一个概述:
后端(Golang)
1. 设计数据库模型
- User: 包含用户基本信息,如用户名、密码(哈希存储)、电子邮件、角色等。
- Vehicle: 包含与车辆相关的所有信息,如车牌号、制造商、型号、颜色等。每个车辆应该与一个用户关联。
2. 实现 JWT 认证
使用jwt-go
库来处理 JSON Web Tokens (JWT)。这包括创建、验证和解码 JWTs。
3. API 设计
- /api/users/register: 注册新用户。
- /api/users/login: 用户登录,返回 JWT。
- /api/vehicles: CRUD 操作,只对具有特定角色(管理员或用户)的用户开放。
4. 角色权限
- 管理员可以管理所有用户的车辆信息。
- 用户只能查看和编辑自己的车辆信息。
- 公司可能有额外的功能,如批量上传车辆信息或查看汇总报告。
前端(Angular)
1. 设计 UI
2. 实现 JWT 身份验证
使用ngx-auth-firebaseui
或自定义服务来处理 JWT 的身份验证流程。
3. 使用 HTTP Interceptors
在 Angular 中,使用 HTTP Interceptors 添加 JWT 到每个请求的头部,以实现自动身份验证。
示例代码片段
Golang - JWT 生成
package main
import (
"fmt"
"time"
"github.com/dgrijalva/jwt-go"
)
var jwtKey = []byte("secret_key")
type Claims struct {
Username string `json:"username"`
jwt.StandardClaims
}
func generateToken(username string) (string, error) {
expirationTime := time.Now().Add(5 * time.Minute)
claims := &Claims{
Username: username,
StandardClaims: jwt.StandardClaims{
ExpiresAt: expirationTime.Unix(),
},
}
token := jwt.NewWithClaims