fix: send auth token with sentence boundary API requests
This commit is contained in:
Binary file not shown.
@@ -17,4 +17,7 @@ enum AppConfig {
|
||||
static let assessmentTimeout: TimeInterval = 180
|
||||
|
||||
static let sha256Pattern = #"^[0-9a-fA-F]{64}$"#
|
||||
|
||||
/// 当前登录用户的认证 token,由 AuthManager 在登录/注销时设置。
|
||||
static var authToken: String = ""
|
||||
}
|
||||
|
||||
@@ -25,14 +25,17 @@ enum HTTPClient {
|
||||
_ type: T.Type,
|
||||
baseURL: String,
|
||||
path: String,
|
||||
timeout: TimeInterval
|
||||
timeout: TimeInterval,
|
||||
additionalHeaders: [String: String] = [:]
|
||||
) async throws -> (value: T, effectiveBaseURL: String) {
|
||||
var headers = ["Accept": "application/json"]
|
||||
headers.merge(additionalHeaders) { _, new in new }
|
||||
let result = try await execute(
|
||||
baseURL: baseURL,
|
||||
path: path,
|
||||
method: "GET",
|
||||
timeout: timeout,
|
||||
headers: ["Accept": "application/json"]
|
||||
headers: headers
|
||||
)
|
||||
guard (200...299).contains(result.statusCode) else {
|
||||
let body = String(data: result.body, encoding: .utf8) ?? ""
|
||||
|
||||
@@ -20,11 +20,16 @@ enum SentenceBoundaryAPI {
|
||||
guard hash.range(of: AppConfig.sha256Pattern, options: .regularExpression) != nil else {
|
||||
throw SentenceBoundaryAPIError.invalidHash
|
||||
}
|
||||
var headers: [String: String] = [:]
|
||||
if !AppConfig.authToken.isEmpty {
|
||||
headers["Authorization"] = "Bearer \(AppConfig.authToken)"
|
||||
}
|
||||
let result = try await HTTPClient.getJSON(
|
||||
SentenceBoundaryDocument.self,
|
||||
baseURL: AppConfig.serverBaseURL,
|
||||
path: "api/v1/videos/\(hash)/sentence-boundaries",
|
||||
timeout: AppConfig.readTimeout
|
||||
timeout: AppConfig.readTimeout,
|
||||
additionalHeaders: headers
|
||||
)
|
||||
guard result.value.videoHash.lowercased() == hash else {
|
||||
throw SentenceBoundaryAPIError.hashMismatch
|
||||
|
||||
@@ -15,6 +15,7 @@ final class AuthManager: ObservableObject {
|
||||
let defaults = UserDefaults.standard
|
||||
token = defaults.string(forKey: "oral_trainer_token") ?? ""
|
||||
nickname = defaults.string(forKey: "oral_trainer_nickname") ?? ""
|
||||
AppConfig.authToken = token
|
||||
}
|
||||
|
||||
var isLoggedIn: Bool { !token.isEmpty }
|
||||
@@ -22,6 +23,7 @@ final class AuthManager: ObservableObject {
|
||||
func saveSession(_ session: AuthSession) {
|
||||
token = session.token
|
||||
nickname = session.user.nickname
|
||||
AppConfig.authToken = session.token
|
||||
let defaults = UserDefaults.standard
|
||||
defaults.set(session.token, forKey: "oral_trainer_token")
|
||||
defaults.set(session.user.nickname, forKey: "oral_trainer_nickname")
|
||||
@@ -30,6 +32,7 @@ final class AuthManager: ObservableObject {
|
||||
func logout() {
|
||||
token = ""
|
||||
nickname = ""
|
||||
AppConfig.authToken = ""
|
||||
showingRegister = false
|
||||
showingSSO = false
|
||||
showingPhoneBinding = false
|
||||
|
||||
Reference in New Issue
Block a user