Mam aplikację internetową zbudowaną z jQuery Mobile i PHP (framework CodeIgniter). Teraz staram się również zrobić jego wersję PhoneGap, aby mogła być dystrybuowana jako samodzielna aplikacja. Jednak aplikacja internetowa PHP. Wersja wykorzystuje Ion Auth, plugin CodeIgniter do uwierzytelniania. Kiedy przejdziesz do strony wymagającej uwierzytelnienia, aplikacja przekieruje Cię do metody logowania kontrolera uwierzytelniania. A po uwierzytelnieniu przekierowuje z powrotem na stronę główną (w tym przypadku strona jQuery Mobile). Działa to dobrze w aplikacji internetowej., Ponieważ strona główna jest otwierana przez kontroler domowy w pierwszej kolejności.Uwierzytelnianie w jQuery Mobile i PhoneGap
Ale tu jest sedno: w wersji PhoneGap stroną "domową" musi być plik index.html w PhoneGap. Prawdopodobnie możesz załadować inny adres URL przy starcie, dodając wartość w PhoneGap.plist, ale to nie jest akceptowalne przez Apple do przesłania do sklepu z aplikacjami. A jeśli zrobię przekierowanie w uwierzytelnianiu, nie mogę wrócić do pliku index.html po uwierzytelnieniu ...
Jak zatem należy postępować w sprawie uwierzytelniania w aplikacji PhoneGap/jQuery Mobile?
UPDATE:
Próbowałem to według jednej z odpowiedzi, ale aplikacja wciąż próbuje przejść do konta/strony logowania (który nie istnieje), po prostu chcę, aby zalogować się poprzez zakładać i zwrócić wartość z metody:
$('#login_form').bind('submit', function() {
event.preventDefault();
//send a post request to your web-service
$.post('http://localhost/app_xcode/account/login', $(this).serialize(), function (response) {
//parse the response string into an object
var response = response;
//check if the authorization was successful or not
if (response == true) {
$.mobile.changePage('#toc', "slide");
} else {
alert('login failed');
$.mobile.changePage('#toc', "slide");
}
});
});
Oto metoda kontroler:
function login()
{
//validate form input
$this->form_validation->set_rules('identity', 'Identity', 'required');
$this->form_validation->set_rules('password', 'Password', 'required');
$base_url = $this->config->item('base_url');
$mobile = $this->detect_mobile();
if ($mobile === false && $base_url != 'http://localhost/app_xcode/') //Only restrict if not developing
redirect('account/notAMobile');
else if ($this->form_validation->run() == true) { //check to see if the user is logging in
//check for "remember me"
$remember = (bool)$this->input->post('remember');
if ($this->ion_auth->login($this->input->post('identity'), $this->input->post('password'), $remember)) { //if the login is successful
//redirect them back to the home page
$this->session->set_flashdata('message', $this->ion_auth->messages());
echo true;
/*redirect($this->config->item('base_url'), 'refresh');*/
}
else
{ //if the login was un-successful
//redirect them back to the login page
$this->session->set_flashdata('message', $this->ion_auth->errors());
/*redirect('account/login', 'refresh');*/ //use redirects instead of loading views for compatibility with MY_Controller libraries
}
}
else
{ //the user is not logging in so display the login page
//set the flash data error message if there is one
$this->data['message'] = (validation_errors()) ? validation_errors()
: $this->session->flashdata('message');
$this->data['identity'] = array('name' => 'identity',
'id' => 'identity',
'type' => 'text',
'value' => $this->form_validation->set_value('identity'),
);
$this->data['password'] = array('name' => 'password',
'id' => 'password',
'type' => 'password',
);
}
}
myślę, że zostały usunięte lub wykomentowane żadnych przekierowań, które były tam. Więc nie wiem, dlaczego próbuje załadować widok nadal? Czy ma to jakiś związek z aplikacją jQuery Mobile próbującą nawigować, ponieważ publikuję ten adres URL?
OK, dziękuję. To naprawdę nie jest serwis internetowy, to tylko wtyczka do CodeIgniter. Mam jednak coś w rodzaju twojego przykładu.Jedyny problem polega na tym, że kiedy wysyłam do konta/logowania (metoda logowania w kontrolerze konta), loguje się, ale w końcu próbuje przejść do konta widoku/logowania. Nie chcę tego. Po prostu chcę zwrócić wartość (echo jeden w metodzie logowania), ale mimo zwracanej wartości nadal próbuje przejść do strony logowania ... Zobacz moją aktualizację. – Anders
Rozgryzłem to, więc teraz działa. Dzięki. – Anders
Więc ludzie, którzy zobaczą to w przyszłości, wiedzą, jakie było twoje rozwiązanie? – Jasper