2013-03-19 20 views

Odpowiedz

14

Uwierzytelnienie to rozległy temat i nie sprecyzowałeś, co chcesz osiągnąć, ale pozwól, że poprowadzę Cię do zbudowania dla ciebie aplikacji do Dart'a, ponieważ uważam, że jest najprostsza na początek. Czemu? Ponieważ nie musimy mówić o każdej możliwej bazie danych, której używamy, ani o tym, jak konfigurować strukturę bazy danych, modele itp. Oraz jak radzić sobie z zabezpieczeniami (generowaniem tokenów itp.).

Dzięki tej wiedzy możesz wdrożyć inne uwierzytelnienia usługi (Google+, Twitter) i ewentualnie własne, jeśli sobie tego życzysz.

Najpierw, zarejestruj aplikację pod numerem Facebook apps page, naciskając Utwórz nową aplikację. Powinieneś dostać tej strony:

enter image description here

(należy wypełnić zarówno App domeny i URL witryny)

następnie określić jakiś plik konfiguracyjny gdzieś (np config.dart), które będą importować wszędzie trzeba:

var config = { 
    'authentication': { 
    'facebook': { 
     'appId': '...', 
     'appSecret': '...', 
     'url': 'http://test.com/login/facebook' 
    } 
    }, 
}; 

Następnie musisz utworzyć gdzieś link. Jeśli używasz Web UI, skrypt Dart mógłby najpierw zaimportować config i stworzyć URL logowania:

import 'config.dart'; 

main() { 
    var fbConfig = config['authentication']['facebook']; 
    var appId = fbConfig['appId']; 
    var url = fbConfig['url']; 

    var loginLinkUrl = 'https://www.facebook.com/dialog/oauth/?client_id=$appId&redirect_uri=$url&state=TEST_TOKEN&scope=email'; 
} 

Teraz na HTML podać link:

<a href="{{ loginLinkUrl }}">Login with Facebook</a> 

W tym momencie może odczytać Poradniki dla programistów na Facebooku: https://developers.facebook.com/docs/reference/dialogs/oauth/

Okno dialogowe logowania na Facebooku spowoduje wyświetlenie użytkownika pod adresem URL określonym w config (/login/facebook), a następnie odpowiedzą na nasze potrzeby aplikacji. I niech pan sobie Routing jaki kiedykolwiek chcesz, ale zasadniczo serwer po otrzymaniu żądania /login/facebook, najpierw koduje pewne właściwości:

var code = uri.encodeUriComponent(request.queryParameters['code']); 
var appId = uri.encodeUriComponent(config['authentication']['facebook']['appId']); 
var appSecret = uri.encodeUriComponent(config['authentication']['facebook']['appSecret']); 
var url = uri.encodeUriComponent(config['authentication']['facebook']['url']); 

Trzeba import 'dart:uri' as uri pierwszy.

Po tym, trochę kodu, który robi żądań API Facebook:

http.read('https://graph.facebook.com/oauth/access_token?client_id=$appId&redirect_uri=$url&client_secret=$appSecret&code=$code').then((contents) { 
    // "contents" looks like: access_token=USER_ACCESS_TOKEN&expires=NUMBER_OF_SECONDS_UNTIL_TOKEN_EXPIRES 
    var parameters = QueryString.parse('?$contents'); 
    var accessToken = parameters['access_token']; 

    // Try to gather user info. 
    http.read('https://graph.facebook.com/me?access_token=$accessToken').then((contents) { 
    var user = JSON.parse(contents); 

    print(user); // Logged in as this user. 
    }); 
}); 

używam pakiet HTTP tutaj i pakiet QueryString.

Po żądaniach API masz dostęp do informacji o użytkowniku. Teraz możesz robić rzeczy takie jak przechowywanie uwierzytelnionego użytkownika w sesji. Możesz użyć np. HttpRequest.session w tym celu. Aby się wylogować, po prostu usuń dane z sesji.

Jest to w przybliżeniu procedura potrzebna do uzyskania uwierzytelnienia Facebook do pracy. Możesz oczekiwać podobnych przepływów pracy dla wielu innych stron internetowych. Możesz również potrzebować/użyć pakietu OAuth2.

Więc Podsumowując:

  • Tworzenie profilu Facebook programisty i aplikacji z odpowiednimi adresami URL.
  • Zapisz identyfikatory aplikacji i takie w niektórych konfiguracjach.
  • Utwórz odpowiedni link do logowania.
  • Napisz kod po stronie serwera, do którego loguje się Facebook.
  • Napisz kilka wywołań API na serwerze, aby pobrać uwierzytelnionego użytkownika.

Miłej zabawy!

+5

Kai, mógłbyś zrobić próbkę i napisać na githubie z plikiem readme.md? Byłaby to świetna próbka do wypchnięcia. –

2

Napisałem 3 part Tutorial about the login/authorization with Dart przy użyciu funkcji bezpieczeństwa Rikulo.

Logowanie z klasą bezpieczeństwa jest proste. W każdym razie standardowy przykład wymaga pewnych zmian, aby dopasować się do konkretnych wymagań, w szczególności routingu/przekierowania po działaniach.

Ponadto samouczek zawiera fałszywe logowanie użytkownika, co oczywiście nie ma opcji do produkcji. Dlatego trzeba @Override standardową funkcję logowania z Rikulo tworząc swój własny Authenticator

class _Authenticator extends Authenticator { 
    @override 
    Future login(HttpConnect connect, String username, String password) {...}; 
} 

Potem idź i porozmawiaj z serwera i wrócić albo obiekt użytkownika o udanym logowaniu lub błędu w przypadku porażki!

Mam nadzieję, że to pomoże!

+0

Ostatnie zatwierdzenie w guru Rikulo zostało złożone 23 lutego 2014 roku. Czy projekt jest martwy? – expert