gpt4 book ai didi

ios - 将 token 发送到服务器 Swift 3

转载 作者:行者123 更新时间:2023-11-28 06:18:23 25 4
gpt4 key购买 nike

我正在尝试向我的服务器发送 token 以检查 token 是否仍然有效或已过期。 token 值是从设备上保存的数据中提取的。但无论我尝试什么,它都会给我“丢失的 token ”,这是我发送空字符串时的状态消息。

    // load content in user var
user = UserDefaults.standard.value(forKey: "parseJSON") as? NSDictionary

// if user is once logged in / register, keep him logged in
if user != nil {
print(user as Any)

let userToken = user!["token"] as? String

let url = NSURL(string: "http://fmm.dummy.com/api/v1/auth/me")!

var request = URLRequest(url: url as URL)

request.setValue("Bearer \(String(describing: userToken))", forHTTPHeaderField: "Authorization")

request.httpMethod = "POST"

当我编辑并执行此操作时,错误消息变为“无效 token ”,这意味着我正在发送某些内容。只是不正​​确

    // load content in user var
user = UserDefaults.standard.value(forKey: "parseJSON") as? NSDictionary

// if user is once logged in / register, keep him logged in
if user != nil {
print(user as Any)

let userToken = user!["token"] as? String

let a: Character = "<"
let b: Character = ">"
let url = NSURL(string: "http://fmm.dummy.com/api/v1/auth/me")!

var request = URLRequest(url: url as URL)

request.setValue("Bearer .append\(a)\(String(describing: userToken)).append\(b)", forHTTPHeaderField: "Authorization")

request.httpMethod = "POST"


//launch session
URLSession.shared.dataTask(with: request) { data, response, error in

有人可以帮我弄清楚哪里做错了吗?谢谢

///编辑嗨,当我按照你的建议进行编辑并想出这个时,我什至无法打印到控制台。这是供您考虑的完整代码。感谢您的回复。如果让 user = UserDefaults.standard.object(forKey: "parseJSON") 作为? [字符串:任何], 让 userToken = user["token"] 作为?字符串 {

       let url = URL(string: "http://fmm.dummy.com/api/v1/auth/me")!
var request = URLRequest(url: url)

let tokenString = "Bearer " + userToken
request.setValue(tokenString, forHTTPHeaderField: "Authorization")
request.httpMethod = "POST"

//launch session
URLSession.shared.dataTask(with: request) { data, response, error in

//check if no error
if error == nil{

do {

let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary

guard let parseJSON = json else{

print ("Error While Parsing")
return
}
print(parseJSON)

let statusMsg = parseJSON["status"] as? String

if statusMsg == "OK"{
//token still valid
self.login()

}else {
//token is invalid
// get main queue to communicate back to user
DispatchQueue.main.async(execute: {
let message = parseJSON["status_msg"] as! String
appDelegate.infoView(message: message, color: colorSmoothRed)
})
}



}catch{
// get main queue to communicate back to user
DispatchQueue.main.async(execute: {
let message = "\(error)"
appDelegate.infoView(message: message, color: colorSmoothRed)
})
return

}


}else{

// get main queue to communicate back to user
DispatchQueue.main.async(execute: {
let message = error!.localizedDescription
appDelegate.infoView(message: message, color: colorSmoothRed)
})
return
}
}.resume()



}

我正在尝试在 appdelegate.swift 中编写代码来检查从先前登录中保存的 token 是否仍然有效或已过期!用户设备上保存的对象如下。当我将用户打印到控制台时,我得到了这个。::--

可选的({ 回应 = { token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjIsImlzcyI6Imh0dHA6XC9cL3htbS54bW9iaWxlbW9uZXkuY29tXC9hcGlcL3YxXC9hdXRoIiwiaWF0IjoxNDk2ODUyNTkxLCJleHAiOjE0OTY4NTYxOTEsIm5iZiI6MTQ5Njg1MjU5MSwianRpIjoiOTFhYjE0MjZkMGZmN2RjZDVjOTQzNTlkZGY4OGY0ZmYifQ.WaQFprfRbJMDQ72IORtWrcSmUqY3EaJp5BAqjijvUAc"; 已验证 = 1; }; 状态=好的;})

最佳答案

您使用了过多的可选值,这可能会导致意外的文字 "Optional(<value>)"调用 description 时方法。

使用可选绑定(bind)安全地解包所有可选值:

if let user = UserDefaults.standard.object(forKey: "parseJSON") as? [String:Any],
let userToken = user["token"] as? String {

let url = URL(string: "http://fmm.dummy.com/api/v1/auth/me")!
var request = URLRequest(url: url)

let tokenString = "Bearer " + userToken
request.setValue(tokenString, forHTTPHeaderField: "Authorization")
request.httpMethod = "POST"
...

一如既往,从不使用valueForKeyUserDefaults 获取单个对象, 始终使用 objectForKey ,并且从不使用NSDictionary对于符合属性列表的字典,请始终使用 [String:Any] .

关于ios - 将 token 发送到服务器 Swift 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44408620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com