Mengakses Drupal REST service dgn Session Authentication

Pada artikel sebelumnya dibahas bagaimana cara mengakses resource di Drupal REST Service dengan Basic Authentication. Pada tulisan ini akan dibahas akses dengan menggunakan Session Authentication.

Dengan Session Authentication, maka pertama kali mengakses server, user harus melakukan login. Jika login berhasil, maka iOS akan otomatis menyimpan informasi Sesssion ini dan otomatis mengirimkannya setiap kali kita mengakses REST server ini, sampai session ini expire atau user logout.

Berikut ini adalah code method untuk login :

 

class Druvice: NSObject {
   
    let loginURL : NSURL = NSURL(string: "http://api.rustamaji.net/api/user/login")!
    let resourceURL : NSURL = NSURL(string: "http://api.rustamaji.net/api/node")!
    var isLogin : Bool = false

    func login(username:String, password:String)->AnyObject {

        let request = NSMutableURLRequest(URL:loginURL )
       
        request.HTTPMethod = "POST"
        request.addValue("application/json", forHTTPHeaderField: "Accept")
        request.addValue("application/json", forHTTPHeaderField: "Content-Type")
       
        let authCode = ["username" : username, "password" : password] as NSDictionary
       
        var json1Error : NSError?
        let bodyData = NSJSONSerialization.dataWithJSONObject(authCode, options: NSJSONWritingOptions.PrettyPrinted, error: nil)
       
        request.HTTPBody = bodyData
        var requestError : NSError?
        var response : NSURLResponse?
       
        let data = NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: &requestError)
       
        if (requestError == nil) {
            var jsonError : NSError?
            let jsonData: AnyObject? = NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.allZeros, error: &jsonError)
           
            println(jsonData)
            isLogin = true
           
            return jsonData!
           
        } else {

            return requestError!
        }
       
       
    }
}

Kemudian kita bisa gunakan kelas ini untuk login sebagai berikut :

override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
       
        let api = Druvice()
        let session: AnyObject = api.login("anyuser", password: "strongpassword")
       
        let errorClass: AnyClass! = NSClassFromString("NSError")
       
        if session.isKindOfClass(errorClass) {
            println("error gak bisa login")
        } else {
            println("login berhasil silakan lanjut")
        }
       
       
        //setelah login berhasil kita bisa lanjut ambil data node
        /*
        if api.isLogin {
            let result: AnyObject = api.get("article", params: nil)
            println(result)
        }
       
        */
       
    }

 

source_code: