17

Mam aplikację Rails 3.1, która używa Devise do uwierzytelniania za pomocą prostego modelu użytkownika z e-mailem, hasłem itp. Muszę być w stanie uwierzytelnić się z aplikacji iPhone. Jak mogę ujawnić tę funkcjonalność? Szerokie odpowiedzi są w porządku, ponieważ nie jestem pewien, jakie są moje opcje.Ujawnianie Rails/Devise Uwierzytelnianie dla aplikacji iOS

+0

Wszystkie kontrolery devse odpowiadają na json i xml, dzięki czemu interfejs REST jest całkiem możliwy – zsquare

+2

Szczerze mówiąc, mam dokładnie ten sam problem. Rozumiem REST, a moje API działa dobrze. Ale nie mogę pojąć koncepcji logowania z urządzenia iOS. (Używam RestKit jako ramy, jeśli to pomaga). Czy ktoś może wykonać czynności niezbędne do tego, aby system iOS mógł uwierzytelnić się w aplikacji szyny, a następnie bez przerwy wywoływać wywołania REST w celu uzyskania informacji? Jak przechowujesz sesję? Czy możesz? Czy przy każdej próbie połączenia musisz podać dane logowania użytkownika? Czy możesz użyć jakiegoś tokena? Jak sformatować połączenie, aby uzyskać informacje? Pomoc też byłaby dla mnie wspaniała !! –

+0

@Wayfarer Dokładnie. Sądzę, że usługa sieci Web musi przekazać jakiś token do urządzenia po pomyślnym uwierzytelnieniu, które urządzenie może wykorzystać do identyfikacji przy każdej komunikacji, ale nie jestem pewien, jak to działałoby w praktyce. Oczywiście model użytkownika może przechowywać jakiś unikalny token dla każdego użytkownika, który jest udostępniany po uwierzytelnieniu, ale nie jestem pewien co do mechaniki obsługi tego. – Undistraction

Odpowiedz

11

Najszybszym sposobem byłoby po prostu włączyć http_authenticatable i podać nazwę użytkownika i hasło za pomocą podstawowego uwierzytelniania HTTP. Chociaż jest to najprostszy sposób, oznacza to, że musisz przechowywać hasło użytkownika w postaci zwykłego tekstu i wysyłać je wraz z każdym zgłoszonym żądaniem.

Lepszą opcją jest uwierzytelnianie tokena, można go przekazać za pomocą parametrów lub HTTP Basic Auth (w takim przypadku można ustawić hasło na "X" i token na nazwę użytkownika). Zaletą tego jest to, że możesz po prostu użyć nazwy użytkownika/hasła, aby uzyskać token, a następnie użyć go do dalszego uwierzytelniania.

Najprostszym sposobem na uwierzytelnienie tokena z minimalną ilością kodu byłoby włączenie uwierzytelniania HTTP w trybie tworzenia i skonfigurowanie nowego kontrolera, który wymaga zalogowania użytkownika, a wszystko, co robi, to wyprowadzenie wyniku reset_authentication_token. Gdy masz już token, przekażesz go do wszystkich przyszłych żądań uwierzytelnienia HTTP, aby je zalogować.

+0

Czy włączasz http_authenticatable, a następnie upuszczasz horrid Username/Password, jeśli próbujesz zalogować się ze strony? Nadal potrzebuję użytkowników do zalogowania się za pośrednictwem strony internetowej i przejrzystego interfejsu. –

+0

@Zachary Anker Dzięki za odpowiedź. Czy możesz potwierdzić, że rozumiem to poprawnie ... Urządzenie trafi http://somesite.com/users/sign_in, przekazując nazwę użytkownika i hasło jako parametry formularza żądania POST. Railsy sprawdzałyby te szczegóły, a jeśli poprawne zwróciłyby token. Urządzenie będzie następnie przechowywać token i używać go w każdej przyszłej komunikacji. Skąd więc szyny pobierają token? Czy generuje unikalny token dla każdego użytkownika. Czy token traci ważność? – Undistraction

+0

@Wayfarer Nie powinien. Dopóki jest to format nawigacyjny, taki jak HTML, nie powinien otwierać okna dialogowego uwierzytelniania HTTP. Jeśli nie chcesz, aby kiedykolwiek się pojawił, możesz również zaimplementować sprawdzanie hasła samodzielnie w kontrolerze, który zwraca token uwierzytelniania. –

Powiązane problemy