2017-11-11 2 views
2

Ich versuche, sich in Swift (iOS) über den Laravel Webservice einzuloggen. Bei Laravel verwende ich passaport. Als ich versucht habe, mich mit dem Postboten einzuloggen, funktioniert es. Aber ich konnte nicht für Swift. Swift Seite wie folgt aus:Verwenden von Laravel Passport mit iOS (Swift)

@IBAction func login(_ sender: Any) { 
    let url = "http://mytest:8000/oauth/token" 
    let myUrl = URL(string:url) 

    let params = [ 
     "grant_type":"password", 
     "client_id": "1", 
     "client_secret": "W04TCZ55lIrDjaT71LOUTY0ABT1why0fyPpK8EtY", 
     "username": email.text!, 
     "password": password.text!, 
     "scope":"*"] 

    Alamofire.request(myUrl!, method: .post, parameters: params).validate(contentType: ["application/json"]).responseJSON { (response) in 

     switch response.result{ 
     case .success(let data): 
      let json = JSON(data) 
      print(json) 
     case .failure(let error): 
      print(error) 
     } 
    } 
} 

erfolgreichen Fall funktioniert, aber Antwort von json =

{ 
"message" : "The user credentials were incorrect.", 
"error" : "invalid_credentials" 
} 

Endlich kann ich mich nicht einloggen von iOS Seite. Ich möchte Laravel Backend für Swift App verwenden. Kann mir jemand helfen?

Antwort

1

Was ich hier fehlt ist encoding Parameter, der auf JSONEncoding.default gesetzt werden sollte, wie Sie application/json Inhaltstyp verwenden. Alamofire.request() legt URLEncoding.default als Standardcodierung fest, sodass Ihr Back-End den Anruf wahrscheinlich nicht richtig analysieren kann.

daher:

Alamofire.request(myUrl!, method: .post, parameters: params, encoding: JSONEncoding.default).validate(contentType: ["application/json"]).responseJSON { (response) in 
    ... 
} 
+0

ich Codierung hinzugefügt, aber nichts ändert sich nicht – Kerim

+0

Dann ist es schwer zu sagen, was schief geht. Überprüfen Sie Ihre Parameter sorgfältig, vielleicht einen Tippfehler im Kundengeheimnis oder ein vorangestelltes Leerzeichen in der E-Mail oder dem Passwort usw. –