Authomatek 是一个用于 Vapor 的 Swift 包,为关系型数据库提供预配置的身份验证。它自动化了创建所有必要路由、控制器和模型的流程,使您能够快速轻松地为您的 Vapor 应用程序设置身份验证。
借助 Authomatek,您可以立即启动并运行安全的用户身份验证。此外,Authomatek 支持 JSON Web 令牌 (JWT) 以实现安全的用户身份验证和授权。
URL | HTTP 方法 | 描述 | 内容 (请求体) |
---|---|---|---|
/auth/register | POST | 注册新用户 | User.DTO.Register |
/auth/login | POST | 使用现有用户登录 | User.DTO.Login |
/auth/logout | GET | 使用现有用户登出 | Bearer Token |
/auth/refresh | GET | 刷新现有 JWT 令牌 | Bearer Token |
Authomatek 可以使用 Swift Package Manager 安装。只需将以下行添加到您的 Package.swift 文件中
dependencies: [
.package(url: "https://github.com/tugcanonbas/authomatek.git", from: "0.0.1")
]
dependencies: [
.product(name: "Authomatek", package: "authomatek"),
],
键 | 默认值 | 描述 |
---|---|---|
SECRET_KEY_FILE_PATH |
无 | JWT 的 .pem 文件路径 |
ACCESS_EXPIRATION_DATE_INTERVAL |
3600 |
访问令牌过期时间 |
REFRESH_EXPIRATION_DATE_INTERVAL |
604800 |
刷新令牌过期时间 |
ssh-keygen -t rsa -b 4096 -m PEM -f {{name_of_file}}.key
SECRET_KEY_FILE_PATH="{{.pem file path}}"
import Authomatek
...
...
try Authomatek.configure(app)
Authomatek 将自动为您创建必要的路由、控制器、模型和迁移。
struct AuthoConnectable: AuthoControllable {
// Custom controller code
}
let config = RouteConfig(path: "api", "v1", "authomatek", register: "register", login: "login", logout: "logout", refresh: "refresh")
let controller = AuthoConnectable()
try Authomatek.configure(app, configuration: config, controller: controller)
protocol User {
var id: UUID? { get }
var email: String { get }
var username: String { get }
var passwordHash: String { get }
var status: UserStatus { get }
var createdAt: Date? { get }
var updatedAt: Date? { get }
var deletedAt: Date? { get }
}
enum UserStatus: String, Codable {
case active
case inactive
case deleted
}
public extension UserModel {
enum DTO {
public struct User: Content {
let id: UUID
let email: String
let username: String
let status: UserStatus
let createdAt: Date
let updatedAt: Date
let deletedAt: Date?
}
public struct Users: Content {
let count: Int
let users: [User]
...
}
public struct Register: Content, Validatable {
let email: String
let username: String
let password: String
...
}
public struct Login: Content, Validatable {
let email: String?
let username: String?
let password: String
...
}
}
}
let usernameValidators: Validator<String> = .count(3...) && .alphanumeric && .pattern(#"^[a-zA-Z0-9-_.]*$"#)
validations.add(ValidationKeys.email, as: String.self, is: .email, required: false)
validations.add(ValidationKeys.username, as: String.self, is: usernameValidators, required: false)
validations.add(ValidationKeys.password, as: String.self, is: .count(8...), required: true)
ConnectableKit 遵循 MIT 许可协议。有关更多信息,请参阅 LICENSE 文件。