Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 

51 Zeilen
876 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 let valueKey = \Token.$value
  33. static let userKey = \Token.$user
  34. var isValid: Bool {
  35. true
  36. }
  37. }