2012-10-10 10 views
5

Nasza aplikacja Rails 3 wykorzystuje facebook-omniauth, umożliwiając użytkownikom uwierzytelnianie za pomocą Facebooka.Uwierzytelnianie użytkownika z serwera iOS Rails 3 i Omniauth

Byłoby miło skorzystać jak najwięcej stron internetowych w oparciu system uwierzytelniania, jak to możliwe, więc próbowałem następujące odpowiedzi (ten, który nie był w dół), aby głosowali this SO question ale nie mogę zmusić go do praca.

Istotą odpowiedź brzmi:

omniauth-facebook będzie obsługiwać żądania do punktu końcowego zwrotnego z parametrem access_token bez żadnych problemów. Proste :)

Więc to sprawdzić w przeglądarce Mam wydając następującą prośbę:

/users/auth/facebook_api/callback?access_token=BAAB... 

ale w moim dzienniku serwera, widzę:

(facebook) Callback phase initiated. 
(facebook) Authentication failure! invalid_credentials: OAuth2::Error, : 
{"error":{"message":"Missing authorization code","type":"OAuthException","code":1}} 

mogę nie rozumiem, co robię źle. Czy to, że staram się to zrobić za pomocą przeglądarki, żeby przetestować coś niepoprawnego? Jakieś inne pomysły na to, w jaki sposób mogę ponownie wykorzystać moją autologię opartą na www dla mojej aplikacji ios?

UPDATE: Nie jestem pewien, ale mam następujący this guide aby mieć wiele strategii facebook omniauth, jeden dla www i inny dla telefonów komórkowych.

+0

Czy znalazłeś odpowiedź na to pytanie? Mam dokładnie ten sam problem! To jest moje pytanie http://stackoverflow.com/questions/14341867/how-to-authenticate-with-facebook-using-rest-with-devise-omniauth – Andres

+1

Niestety nie, ale właśnie opublikowałem moje obejście jako oficjalna odpowiedź. Nie wiem, w jaki sposób plakat w pytaniu, z którym się łączyłem, doprowadził jego rozwiązanie do działania, ale absolutnie nie mogłem. – djibouti33

Odpowiedz

7

Nigdy nie znalazłem rozwiązania zgodnego z pierwotnym pytaniem, ale oto, jak to rozwiązałem: weź token dostępu, który dostałeś na iPhone'a, i wyślij go na serwer i ręcznie wykonaj logowanie.

def facebook_login 
    graph = Koala::Facebook::API.new(params[:user][:fb_access_token]) 
    profile = graph.get_object('me') 
    omniauth = build_omniauth_hash(profile) 

    @user = User.find_or_create_for_facebook_oauth(omniauth) 
end 

na www mieliśmy już metody nazywanej find_or_create_for_facebook_oauth, i że wziął wynik z Omniauth i albo znaleźć użytkownika lub utworzony nowy. Aby móc korzystać z tej metody w telefonii komórkowej, musiałem ręcznie zbudować podobną strukturę, więc mogłem ją przekazać jako argument.

def build_omniauth_hash(profile) 
    struct = OpenStruct.new 
    struct.uid = profile['id'] 
    struct.info = OpenStruct.new 
    struct.info.email = profile['email'] 
    struct.info.image = "http://graph.facebook.com/#{profile['id']}/picture?type=square" 
    struct.info.first_name = profile['first_name'] 
    struct.info.last_name = profile['last_name'] 
    struct.info.bio = profile['bio'] 
    struct.info.hometown = profile['hometown']['name'] if profile['hometown'] 
    struct.info.location = profile['location']['name'] if profile['location'] 
    struct 
end 
+0

dzięki, zrobię to, a jeśli znajdę coś innego, uaktualnię cię tutaj! – Andres

Powiązane problemy