ios - 如何通过 alamofire 4 和 swift 3 提供身份验证 token 以登录 api

标签 ios swift authorization token alamofire

全部。

我可以通过登录获取身份验证 token 。但我可以通过 swift 和 alamofire 在我的服务器上进行身份验证。

这是 postman 。如您所见,如果我有 token ,我可以在我的服务器上进行身份验证。 enter image description here

这是快速 View Controller 。

import UIKit
import Alamofire
import SwiftyJSON
import KeychainAccess

class ViewController: UIViewController {
    let authLoginUrl = "http://ec2-52-79-155-29.ap-northeast-2.compute.amazonaws.com:8000/rest-auth/login/"
    let keychain = Keychain(service: "wanote")
    let projectUrl = "http://ec2-52-79-155-29.ap-northeast-2.compute.amazonaws.com:8000/api/user/ryulstory"

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let username = "username"
        let password = "1234!"

        self.doAuth(username: username, password: password)
        }

        override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func doAuth(username:String, password:String) {
        let params = ["username": username, "password": password]
        var authToken = Alamofire.request(self.authLoginUrl, method: .post, parameters: params)
        authToken.responseJSON { response in
            let statusCode = response.response?.statusCode ?? 0

            switch statusCode {
            case 200...299:
                let jsonData = JSON(response.result.value)
                if let token = jsonData["key"].string{
                    self.keychain["token"] = token
                    self.getProjects()
                }
            case 400...499:
                print("Server responded no")

            case 500...599:
                print("Server error")

            default:
                print("There was an error with your request")
            }

    }
}

    func getProjects(){
        if let token = self.keychain["token"] {
            if let Purl = URL(string: self.projectUrl){
                var mutableUrlRequest = URLRequest(url: Purl)
                mutableUrlRequest.httpMethod = "GET"
                mutableUrlRequest.setValue("Token " + token, forHTTPHeaderField: "Authorization")
                var manager = Alamofire.SessionManager.default
                var getProjectsRequest = manager.request(mutableUrlRequest)
                    getProjectsRequest.responseJSON { response in
                        print(response.data)
                }

            }

        } else {
            print("no token")
        }


    }


}

我检查了通过函数 doAuth 获取 token 。它运行正常。 函数 getprojects 生成错误状态代码 401。 我认为函数 getprojects 有问题。但我找不到它。

你能帮帮我吗?

最好的问候。

最佳答案

它会转到 401,因为您在没有 header 授权的情况下发送请求。

使用 Alamofire,您可以像这样设置 header 授权。

    let url = "URL_LOGIN"
    //Get token logic
    let token = ""
    let headers = ["Authorization": "Token \(token)"]
    let params = ["user": "", "pass":""] //This goes in the body of the request
    Alamofire.request(url, method: .post, parameters: params, encoding: URLEncoding.default, headers: headers).responseJSON { (response) in
        if let value = response.result.value {
            print(value)
        }

    }

有了这个,您将在请求中发送 header 以获得您想要的内容。

关于ios - 如何通过 alamofire 4 和 swift 3 提供身份验证 token 以登录 api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44872222/

相关文章:

c# 检查用户是否是组的成员?

ios - 如何禁用 UIWebView 中的双击事件

ios - ArcGIS运行时SDK : Mapview crash on iOS

ios - 声明字典 [字符串 :AnyObject] with overflowing Integers

api - 使用 JWE 或 JWS 的优缺点是什么

statistics - RavenDB:Raven Query 未返回具有文档授权的正确计数

ios - 如何将 modalPresentationCapturesStatusBarAppearance = NO 与自定义 UIPresentationController 一起使用?

ios - 检测 BOOL 可用性以支持多个 iOS 版本?

ios - 在布局更改的同时重新加载/动画化 UICollectionView

ios - 如何使用 FBSDKCoreKit 向 Facebook 用户发布图片