如何使用Alamofire进行基于令牌的身份验证?

时间:2016-05-18 07:49:47

标签: ios node.js swift authentication alamofire

服务器是用node.js / express编写的,将共享下面的代码。

我的目标是将用户身份验证到ios应用程序中,例如,让用户看到UI

enter image description here

在IOS / Swift方面,用户输入电子邮件和密码

import UIKit
import Alamofire

class LoginViewController: UIViewController {



    @IBOutlet weak var emailField: UITextField!
    @IBOutlet weak var passwordField: UITextField!


    @IBAction func loginButton(sender: AnyObject) {
        let parameters = [
            "email": emailField.text!,
            "password": passwordField.text!
        ]

        // What exactly I have to write to authenticate the user??
        Alamofire.request(.POST, "https://genietesting.herokuapp.com/auth/login", parameters: parameters, encoding: .JSON)


    }


}

如果用户成功,则将根据服务器提供的令牌重定向到包含用户数据的新屏幕。

node.js /表示用于登录的示例代码

app.post('/auth/login', function(req, res) {
    User.findOne({ email: req.body.email }, '+password', function(err, user) {
      if (!user) {
        return res.status(401).send({ message: 'Invalid email and/or password' });
      }
      user.comparePassword(req.body.password, function(err, isMatch) {
        if (!isMatch) {
          return res.status(401).send({ message: 'Invalid email and/or password' });
        }
        res.send({ token: createJWT(user)});
      });
    });
  });

上面的代码只是简单地找到mongodb数据库中的用户,如果它不存在,只需发送带有消息的401,如果找到,则比较密码是否正确,如果它是正确的,那么将令牌发送回客户端。

我理解服务器部分,但是在IOS / Swift部分我究竟要编写什么来用服务器给出的令牌来验证用户?

1 个答案:

答案 0 :(得分:1)

基本上你应该检查服务器为你的请求提供的响应。我认为以下代码会有所帮助:

Alamofire.request(.POST, "https://genietesting.herokuapp.com/auth/login", parameters: parameters, encoding: .JSON)
    .responseString { response in
         print("Success: \(response.result.isSuccess)")
         print("Response String: \(response.result.value)")
         if let httpError = response.result.error {
             let statusCode = httpError.code
             // show the error message to user
         } else { //no errors
             let statusCode = (response.response?.statusCode)!
             // proceed to the next page
         }
}