Swift 中使用 Wordpress REST API 的 JWT 身份验证
JWT Authentication with Wordpress REST API in Swift
我正在尝试通过 Swift 在我的 Wordpress 博客上发帖。我正在使用带有 Java Web 令牌 (JWT) 身份验证的 Wordpress REST API。第一步是使用 HTTP POST 方法将用户凭据传递到服务器。服务器然后 returns 一个 JSON 包含身份验证所需的 JWT 令牌的对象。我可以使用像 Postman 这样的 REST API 程序来完成这一切,但是我在使用 Swift 代码时遇到了问题。
我的凭据发送得很好,服务器 returns 一些数据,但我无法从这些数据中获取令牌。
此 Swift 代码由 Postman 应用程序生成:
import Foundation
let headers = [
"Content-Type": "application/json",
"cache-control": "no-cache",
]
let parameters = [
"username": "myUsername",
"password": "myPassword"
] as [String : Any]
let postData = JSONSerialization.data(withJSONObject: parameters, options: [])
let request = NSMutableURLRequest(url: NSURL(string: "https://myDomain/wp-json/jwt-auth/v1/token")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
当我在 Postman 中执行 HTTP POST 命令时,我得到了这个 JSON:
{
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvY3F1aWNrLmNhIiwiaWF0IjoxNTQ3Njc3MDMzLCJuYmYiOjE1NDc2NzcwMzMsImV4cCI6MTU0ODI4MTgzMywiZGF0YSI6eyJ1c2VyIjp7ImlkIjoiMyJ9fX0.DgxmmSFKnEdXuWi5EiBk1BpFvWrD57KIE8TiWazId-4",
"user_email": "myEmail",
"user_nicename": "myUsername",
"user_display_name": "myUsername"
}
是否可以使用 Swift 获得相同的结果?我想这是由 session.dataTask 方法返回的,我只是不知道如何解析它。
好的,所以答案是将其添加到 session.dataTask 方法(在 else 闭包中)。
let jsonObject = try! JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSDictionary
let query = jsonObject["token"] as! String
print(query)
我知道这是一个旧的 post 但我也在尝试将我的 JWT-AUTH REST API 与 Swift 中的 WordPress 一起使用。我已经获得了令牌,但是我想知道如何使用它来访问某些受保护的页面?即:我的网站。com/user-page/USERNAME 其中 USERNAME 是用户名,如果用户使用该用户名登录,它仅提供对 tis 页面的访问。
我尝试在 postman 中将令牌作为 BearerToken 放入,但没有成功!
我正在尝试通过 Swift 在我的 Wordpress 博客上发帖。我正在使用带有 Java Web 令牌 (JWT) 身份验证的 Wordpress REST API。第一步是使用 HTTP POST 方法将用户凭据传递到服务器。服务器然后 returns 一个 JSON 包含身份验证所需的 JWT 令牌的对象。我可以使用像 Postman 这样的 REST API 程序来完成这一切,但是我在使用 Swift 代码时遇到了问题。
我的凭据发送得很好,服务器 returns 一些数据,但我无法从这些数据中获取令牌。
此 Swift 代码由 Postman 应用程序生成:
import Foundation
let headers = [
"Content-Type": "application/json",
"cache-control": "no-cache",
]
let parameters = [
"username": "myUsername",
"password": "myPassword"
] as [String : Any]
let postData = JSONSerialization.data(withJSONObject: parameters, options: [])
let request = NSMutableURLRequest(url: NSURL(string: "https://myDomain/wp-json/jwt-auth/v1/token")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
当我在 Postman 中执行 HTTP POST 命令时,我得到了这个 JSON:
{
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczpcL1wvY3F1aWNrLmNhIiwiaWF0IjoxNTQ3Njc3MDMzLCJuYmYiOjE1NDc2NzcwMzMsImV4cCI6MTU0ODI4MTgzMywiZGF0YSI6eyJ1c2VyIjp7ImlkIjoiMyJ9fX0.DgxmmSFKnEdXuWi5EiBk1BpFvWrD57KIE8TiWazId-4",
"user_email": "myEmail",
"user_nicename": "myUsername",
"user_display_name": "myUsername"
}
是否可以使用 Swift 获得相同的结果?我想这是由 session.dataTask 方法返回的,我只是不知道如何解析它。
好的,所以答案是将其添加到 session.dataTask 方法(在 else 闭包中)。
let jsonObject = try! JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.mutableContainers) as! NSDictionary
let query = jsonObject["token"] as! String
print(query)
我知道这是一个旧的 post 但我也在尝试将我的 JWT-AUTH REST API 与 Swift 中的 WordPress 一起使用。我已经获得了令牌,但是我想知道如何使用它来访问某些受保护的页面?即:我的网站。com/user-page/USERNAME 其中 USERNAME 是用户名,如果用户使用该用户名登录,它仅提供对 tis 页面的访问。
我尝试在 postman 中将令牌作为 BearerToken 放入,但没有成功!