[英]How to pass access token to Alamofire?
I am trying to pass access token in Alamofire
but getting confuse in various methods around web. 我试图在
Alamofire
传递访问令牌,但在网络上的各种方法中混淆。
Below are methods which we need to use. 以下是我们需要使用的方法。
let todosEndpoint: String = "https:url......."
let headers = [
"Authorization": "Bearer \(token!)",
"Content-Type": "application/X-Access-Token"
]
let Auth_header = [ "Authorization" : tokenString! ]
Alamofire.request(todosEndpoint, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: Auth_header)
.responseJSON { response in
print("response.request \(response.request)") // original URL request
print("response.response \(response.response)") // HTTP URL response
print("response.data \(response.data)") // server data
print("response.result \(response.result)")
print("response \(response)")
}
}
OR 要么
let aManager = SessionManager()
aManager.session.configuration.httpAdditionalHeaders = [
"Authorization": "Bearer tokenString"]
OR 要么
let headerss = [
"Authorization": tokenString]
OR 要么
let aManager = SessionManager()
aManager.session.configuration.httpAdditionalHeaders = [
"Authorization": "Basic tokenString"]
What is proper way to pass access token? 什么是传递访问令牌的正确方法?
Did you tried this, it's available in Alamofire documentation: 你试过这个吗,它可以在Alamofire文档中找到:
let headers: HTTPHeaders = [
"Authorization": "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==",
"Accept": "application/json"
]
Alamofire.request("https://httpbin.org/headers", headers: headers).responseJSON { response in
debugPrint(response)
}
Another example is: 另一个例子是:
let user = "user"
let password = "password"
var headers: HTTPHeaders = [:]
if let authorizationHeader = Request.authorizationHeader(user: user, password: password) {
headers[authorizationHeader.key] = authorizationHeader.value
}
Alamofire.request("https://httpbin.org/basic-auth/user/password", headers: headers)
.responseJSON { response in
debugPrint(response)
}
One more way is: 还有一种方法是:
let user = "user"
let password = "password"
let credential = URLCredential(user: user, password: password, persistence: .forSession)
Alamofire.request("https://httpbin.org/basic-auth/\(user)/\(password)")
.authenticate(usingCredential: credential)
.responseJSON { response in
debugPrint(response)
}
It can be done by using Alamofire in following way: 可以通过以下方式使用Alamofire来完成:
let url: String = "https:url......."
var request = URLRequest(url: NSURL(string: url)! as URL)
// Your request method type Get or post etc according to your requirement
request.httpMethod = "POST"
request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
// Your required parameter in case of Post request
let parameters: [String: Any] = ["paramter1": "vaue1"]
request.httpBody = try! JSONSerialization.data(withJSONObject: parameters )
Alamofire.request(request).responseJSON { (responseObject) -> Void in
// Your required functionality here
}
I'm using look like this :- 我用的是这样的: -
let username = "Tuser"
let password = "Tpassword"
let credentialData = "\(username):\(password)".data(using: String.Encoding.utf8)!
let base64Credentials = credentialData.base64EncodedString(options: [])
let headers = ["Authorization": "Basic \(base64Credentials)"]
OR 要么
let headers = [ "Authorization" : token ]
If you are using Alamofire 4.0 or greater, you can use RequestAdapter
protocol to intercept the request and inject the JWT token. 如果您使用的是Alamofire 4.0或更高版本,则可以使用
RequestAdapter
协议拦截请求并注入JWT令牌。 This solution is perfect if you make many requests and have to use JWT in each of them. 如果您提出许多请求并且必须在每个请求中使用JWT,则此解决方案是完美的。
class AccessTokenAdapter: RequestAdapter {
private let accessToken: String
private let prefix: String
public init(accessToken: String, prefix: String) {
self.accessToken = accessToken
self.prefix = prefix
}
public func adapt(_ urlRequest: URLRequest) throws -> URLRequest {
var urlRequest = urlRequest
if let urlString = urlRequest.url?.absoluteString, urlString.hasPrefix(prefix) {
urlRequest.setValue("Bearer " + accessToken, forHTTPHeaderField: "Authorization")
}
return urlRequest
}
}
Somewhere in the class you initialize the SessionManager
like this: 在类的某个位置初始化
SessionManager
如下所示:
var sessionManager = SessionManager()
sessionManager.adapter = AccessTokenAdapter(accessToken: token, prefix: "https://protected.api.com")
And you use it whenever you want to: 并且您可以随时使用它:
sessionManager.request(MyRouter.getCustomData()).responseArray { (response: DataResponse<[CustomData]>) in
if response.result.isSuccess {
self.array = response.result.value ?? []
} else {
print(response.debugDescription)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.