2015-08-25 2 views
0

Я пишу этот вопрос, потому что мне трудно понять, как реализовать простой базовый аутентификационный логин с Swift.Swift: как использовать NSURLSession для запроса внешней базы данных?

Первый экран моего приложения - это простая форма с текстовыми полями (имя пользователя и пароль) и кнопка входа. В моем файле LoginViewController.swift я связан кнопку с этим:

@IBAction func doLogin(sender : AnyObject) { 
} 

probem теперь, что я не знаю, как идти дальше. У меня есть локальный сервер в MAMP, где есть эта file.php запрашивая базу данных и которая работает отлично:

<?php 

$deep=""; 
require_once($deep."class/config.php"); 
$sistema = new config($deep); 

if(isset($_GET["username"]) && isset($_GET["password"])) { 
    $username=mysqli_real_escape_string($sistema->dbConn,$_GET["username"]); 
    $password=mysqli_real_escape_string($sistema->dbConn,$_GET["password"]); 
    $userL=$sistema->user->allAdmin("WHERE username='".$username."' AND password='".$password."' "); 

    echo json_encode($userL); 
} 

?> 

Так как я могу выполнить запрос GET к этому файлу? Я полагаю, что нужно, чтобы создать URL с пользовательскими данными, как эта форма:

http://localhost:8888/excogitoweb/loginM.php?username=lorenzo&password=lorenzo 

, но тогда я не знаю, как идти дальше. Как я могу выполнить этот запрос для получения этого содержимого JSON? И как я могу проверить содержимое JSON, чтобы понять, удалось ли выполнить процедуру входа или нет? Я наблюдал много учебников в YouTube, в целом this, но даже если я скопировать код, который они показывают, я всегда получаю ошибку компиляции ...

+0

Аутентификация не просто, это трудно получить правильный. Если это реальное приложение, где важна аутентификация, обратитесь за помощью к эксперту домена, очень сложно получить правильное и очень простое наличие одного небольшого недостатка, который нарушает безопасность. – zaph

+0

Похоже на [этот вопрос] (http://stackoverflow.com/q/32205126/451475) тем же OP 2 часа назад. – zaph

+0

Это не так важно ... Мне просто нужна простая аутентификация, насколько это было бы проще. Я просто хочу выполнить запрос HTTT GET в этот файл и проверить, содержат ли возвращенные данные JSON пользователя (с этим именем пользователя и паролем) ... ничего более. Это так сложно? –

ответ

1

для «нормального» GET запроса вам нужно NSURLRequest с URL ... Его так же, как это:

if let requestURL: NSURL = NSURL(string: "http://localhost:8888/excogitoweb/loginM.php?username=lorenzo&password=lorenzo") as NSURL? { 
    let urlRequest: NSURLRequest = NSURLRequest(URL: requestURL) 
    let urlSession = NSURLSession.sharedSession().dataTaskWithRequest(urlRequest, completionHandler: { (data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in 
     if let responseJSON: [String: String] = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.allZeros, error: nil) as? [String: String] { 
      ///Here you can handle the responded JSON 
     } 
    }) 
    urlSession.resume() 
} 

не забывайте, что вы находитесь на фоне задачи при обращении с JSON откликнулся ... Если вы хотите сделать некоторые UI материал там вам нужно будет направить его в очередь Mein

Также a порекомендует вам делать HTTP POST вместо HTTP GET для таких вещей

UPDATE

if let responseJSON: [[String: String]] = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.allZeros, error: nil) as? [[String: String]] { 
       ///Here you can handle the responded JSON 
      } 
+0

Спасибо за ваш ответ. Я думаю, что забыл написать, что формат JSON, который я получаю из файла php, выглядит следующим образом: [{«id»: «8», «nome»: «Lorenzo», «cognome»: «Vinci», «email» ":" [email protected] "," username ":" lorenzo "," password ":" lorenzo "," auth ":" Utente "}] –

+0

работает ли это с тем, что вы написали? или я получу только json с именем пользователя и паролем? –

+0

Нет JSON, который вы опубликовали, является JSONArray ... Я напишу вам обновление в своем ответе, как это сделать ... –

Смежные вопросы