login विशिष्ट शरीर के साथ HTTP पोस्ट का अनुरोध कैसे करें? और मुझे लॉगिन करने के लिए सर्वर से टोकन कैसे पहुंचाना है?



swift3 http-post (1)

मुझे इस तरह से एक परिदृश्य आ रहा है:

1) मैं एचटीटीपी पोस्ट अनुरोध बनाना चाहता हूं और इसके लिए मुझे डेटा मिल रहा है, कृपया इस चित्र को देखें:

2) जैसा कि आप ऊपर की छवि में देख सकते हैं, मुझे उल्लिखित शरीर के साथ एक अनुरोध पोस्ट करना होगा और मुझे नाम का उत्तर मिल रहा है: टोकन पोस्ट अनुरोध बनाने और इस टोकन प्रतिक्रिया को कैसे प्राप्त करें?

3) यह टोकन प्रतिक्रिया मुझे मेरेप में प्रवेश करने की अनुमति देगा।

मैं इस परिदृश्य के लिए नौसिखिया हूँ मैंने अपने द्वारा कुछ कोड की कोशिश की है लेकिन फिर भी इस पद के अनुरोध कोड के साथ अपने ऐप प्रतिनिधि कोड को कैसे संयोजित करने में भ्रम हो रहा है।

कोड

 @IBAction func signinaction(_ sender: Any) {

    self.username.resignFirstResponder()
    self.password.resignFirstResponder()

    if (self.username.text == "" || self.password.text == "") {
        let alertView = UIAlertController(title: "Login failed",
                                          message: "Wrong username or password." as String, preferredStyle:.alert)
        let okAction = UIAlertAction(title: "Try Again!", style: .default, handler: nil)
        alertView.addAction(okAction)
        self.present(alertView, animated: true, completion: nil)
        return
    }

    // Check if the user entered an email
    if let actualUsername = self.username.text {

        // Check if the user entered a password
        if let actualPassword = self.password.text {

            // Build the body message to request the token to the web app
            self.bodyStr = "username=8870417698&password=1234&grant_type=password" + actualUsername + "&password=" + actualPassword

            // Setup the request
            let myURL = NSURL(string: "http://ezschoolportalapi.azurewebsites.net/token")!
            let request = NSMutableURLRequest(url: myURL as URL)
            request.httpMethod = "POST"
            request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
            request.setValue("application/json", forHTTPHeaderField: "Accept")
            request.httpBody = bodyStr.data(using: String.Encoding.utf8)!

            let task = URLSession.shared.dataTask(with: request as URLRequest) {
                (data, response, error) -> Void in
                if  data?.count != 0
 {

                    do {

                                                   let tokenDictionary:NSDictionary = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! NSDictionary
                        print(tokenDictionary)
                        // Get the token
                        let token:String = tokenDictionary["access_token"] as! String

                        // Keep record of the token

                        let userdefaults = UserDefaults()

                        let saveToken = userdefaults.set(token, forKey: "access_token")
                        userdefaults.synchronize()


                        // Dismiss login view and go to the home view controller
                        DispatchQueue.main.async {
                            self.dismiss(animated: true, completion: nil)
                        }


                    }
                    catch {
                        // Wrong credentials
                        // Reset the text fields
                        self.username.text = ""
                        self.password.text = ""

                        // Setup the alert
                        let alertView = UIAlertController(title: "Login failed",
                                                          message: "Wrong username or password." as String, preferredStyle:.alert)
                        let okAction = UIAlertAction(title: "Try Again!", style:.default, handler: nil)
                        alertView.addAction(okAction)
                        self.present(alertView, animated: true, completion: nil)
                        return
                    }
                }
            }
            task.resume()
        }
    }
}

प्रश्न यह है कि यह कोड मेरे उपरोक्त कोड के साथ कैसे संयोजित करें:

let appDelegate = UIApplication.shared.delegate as! AppDelegate  appDelegate.gotoMainvc()

अगर मैं सीधे इस कोड का उपयोग करता हूं तो किसी भी मामले में मैं अपनी होम स्क्रीन पर स्विच कर सकता हूं, इससे कोई फर्क नहीं पड़ता कि क्या इस पोस्ट अनुरोध कोड का उपयोग कर रहा है या नहीं। कृपया मदद करे।


आप bodyStr में उपयोगकर्ता नाम और पासवर्ड को कड़ी मेहनत कर रहे हैं

self.bodyStr = "username=" + actualUsername + "&password=" + actualPassword + "&grant_type=password"

अंदर स्थित बयानों को अपडेट करें

   do {

    let tokenDictionary:NSDictionary = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! NSDictionary
    print(tokenDictionary)
                            // Get the token
    if let authToken = tokenDictionary["access_token"] as? String{
    self.token = authToken
    UserDefaults.standard.set(accessToken, forKey: "access_token")
    UserDefaults.standard.synchronize()
    DispatchQueue.main.async {
    self.dismiss(animated: true, completion: nil)
    }
    } 
  }

आप isUserLoggedIn की तरह एक फ़ंक्शन को लागू कर सकते हैं जो कि अगर यूज़र डीफॉल्ट में टोकन सहेजा जाता है तो सही होगा। आपको यह देखने की आवश्यकता है कि उपयोगकर्ता ने applicationdidFinishLaunchingWithOptions डिलीगेट की ऐपडिडफिनिशल लॉन्चिंग विथ ऑप्शन में लॉग इन किया है।

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
if isUserLoggedIn(){
//showHomeViewController
} else{
//showLoginViewController
}
return true
}
   func isUserLoggedIn() -> Bool{
        if let accessToken = UserDefaults.standard.object(forKey: "access_token") as? String {
            if (accessToken.characters.count)! > 0{
                return true
            } else {
                return false
            }

        }
        else {
            return false
        }
    }