Próbuję znaleźć prosty przykład uwierzytelnienia użytkownika za pomocą Dart. Jak dotąd najbliżej znalazłem https://github.com/dart-lang/bleeding_edge/blob/master/dart/tests/standalone/io/http_auth_test.dart. Czy ktoś może przekazać lub dostarczyć mi działający przykład uwierzytelniania po stronie serwera za pomocą Dart. Z góry dziękuję.Przykład logowania do darta/wylogowania
Odpowiedz
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:
(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!
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!
Ostatnie zatwierdzenie w guru Rikulo zostało złożone 23 lutego 2014 roku. Czy projekt jest martwy? – expert
Kai, mógłbyś zrobić próbkę i napisać na githubie z plikiem readme.md? Byłaby to świetna próbka do wypchnięcia. –