您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 

55 行
969 B

  1. //
  2. // File.swift
  3. //
  4. //
  5. // Created by Michiel Carman on 9/24/24.
  6. //
  7. import Vapor
  8. import Fluent
  9. final class Token: Model, Content, @unchecked Sendable {
  10. static let schema = "token"
  11. @ID()
  12. var id: UUID?
  13. @Parent(key: "user_id")
  14. var user: User
  15. @Field(key: "value")
  16. var value: String
  17. init() {}
  18. init(id: UUID? = nil, userId: User.IDValue, token: String) {
  19. self.id = id
  20. self.$user.id = userId
  21. self.value = token
  22. }
  23. }
  24. extension Token {
  25. static func generate(for user: User) throws -> Token {
  26. let random = [UInt8].random(count: 32).base64
  27. return try Token( userId: user.requireID(), token: random)
  28. }
  29. }
  30. extension Token: ModelTokenAuthenticatable {
  31. typealias User = App.User
  32. static var valueKey: KeyPath<Token, Field<String>> {
  33. return \Token.$value
  34. }
  35. static var userKey: KeyPath<Token, Parent<User>> {
  36. return \Token.$user
  37. }
  38. var isValid: Bool { true }
  39. }