2013-03-19 2 views
7

Я пытаюсь найти простой пример аутентификации пользователей с помощью Dart. Пока что ближайший я нашел https://github.com/dart-lang/bleeding_edge/blob/master/dart/tests/standalone/io/http_auth_test.dart. Может ли кто-нибудь направить или предоставить мне рабочий пример аутентификации на стороне сервера, используя Dart. Заранее спасибо.Dart login/logout example

ответ

14

Аутентификация - это обширная тема, и вы не указали многое, чего хотите достичь, но позвольте мне направить вас на создание аутентификации Facebook для вас, приложение Dart, потому что я думаю, что это самый простой способ начать. Зачем? Потому что нам не нужно говорить о каждой возможной базе данных, которую вы могли бы использовать, или о том, как вы настраиваете структуру базы данных, модели и т. Д., И как вы справляетесь с безопасностью (генерируете токены и т. Д.).

С помощью этих знаний вы сможете реализовать другие сервисные аутентификации (Google+, Twitter) и, в конечном счете, свои собственные, если хотите.

Итак, зарегистрируйтесь на Facebook apps page нажав Создать новое приложение. Вы должны получить эту страницу:

enter image description here

(Обязательно для заполнения как домен приложения и URL сайта)

Затем указать какой файл конфигурации где-то (например config.dart), что вы будете импортировать везде вам нужно:

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

Тогда вам нужно создать ссылку где-нибудь. Если вы используете веб-интерфейс, ваш Dart сценарий может первым импортировать конфигурационный файл и создать логин URL:

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'; 
} 

Теперь на вашем HTML можно указать ссылку:

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

На данный момент, возможно, прочитать руководства для разработчиков Facebook: https://developers.facebook.com/docs/reference/dialogs/oauth/

Диалоговое окно входа в Facebook будет вызывать пользователя по адресу, указанному в config (/login/facebook), тогда наше приложение должно ответить на него. Я позволяю вам обрабатывать маршрутизации, как все вы хотите, но, по существу сервер, когда он получает /login/facebook запрос, он первым кодирует некоторые свойства:

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']); 

Вы должны import 'dart:uri' as uri сначала.

После этого, немного кода, который делает запросы 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. 
    }); 
}); 

Я использую HTTP пакет здесь и QueryString пакет.

После запросов API у вас есть информация о пользователе. Теперь вы можете делать такие вещи, как сохранение аутентифицированного пользователя в сеансе. Вы можете использовать, например. HttpRequest.session для этой цели. Чтобы выйти из системы, просто удалите данные из сеанса.

Это примерно то, что вам нужно сделать, чтобы получить аутентификацию Facebook для работы. Вы можете ожидать подобных рабочих процессов для многих других веб-сайтов. Вам также может понадобиться/использовать пакет OAuth2.

Итак, подведем итог:

  • Создать Facebook профиль разработчика и приложения с соответствующими URL.
  • Запишите идентификаторы приложения и т. Д. В некоторой конфигурации.
  • Создайте правильную ссылку для входа.
  • Напишите код на стороне сервера, на котором пользователи Facebook находят пользователей.
  • Напишите несколько вызовов API на сервере для получения аутентифицированного пользователя.

Удачи!

+5

Кай, не могли бы вы сделать образец и сообщение на github с помощью readme.md? Это будет отличная выборка. –

2

Я написал 3 part Tutorial about the login/authorization with Dart с использованием функции безопасности Rikulo.

Войти с классом безопасности прямолинейно. Во всяком случае, стандартный пример нуждается в некоторых изменениях, соответствующих вашим конкретным требованиям, особенно маршрутизации/перенаправления после действий.

Кроме того, учебное пособие включает фиктивный вход пользователя, который, очевидно, не является вариантом для производства. Таким образом, вам необходимо @Override стандартную функцию для входа в систему из Rikulo путем создания собственного Authenticator

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

Затем идти вперед и говорить с вашим сервером и возвращать либо объект пользователя на успешной регистрации или ошибки на провал!

Надеюсь, это вам поможет!

+0

Последний бой в Rikulo github был сделан 23 февраля 2014 года. Проект мертв? – expert