2013-03-19 7 views

答えて

14

認証は膨大なトピックであり、達成したいことはあまり指定していませんが、DartアプリケーションのFacebook認証を構築するためのガイドをさせていただきます。どうして?使用している可能性のあるすべてのデータベース、データベース構造、モデルなどの設定方法、セキュリティの処理方法(トークンの生成など)については話す必要がないためです。

この知識があれば、他のサービス認証(Google+、Twitter)を実装し、必要に応じて独自のサービス認証(Google+、Twitter)を実装することができます。

まず、Facebook apps pageにアプリケーションを登録します。新しいアプリケーションを作成します。あなたはどこでもあなたが必要にインポートすること(例えばconfig.dart)どこかの設定ファイルを指定すると

enter image description here

(アプリケーションドメインやサイトのURLの両方を必ず記入して)

:あなたは、このページを取得する必要があります

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

次に、どこかのリンクを作成する必要があります。おそらく読んで、この時点で

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

:あなたがリンクを指定してHTMLに今

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

:あなたは、Web UIを使用している場合は、あなたのダーツのスクリプトは、最初の設定をインポートして、ログインURLを作成することができますhttps://developers.facebook.com/docs/reference/dialogs/oauth/

Facebookのログインダイアログは、ユーザーがconfig(/login/facebook)で指定したURLにユーザーをスローします。アプリケーションがそれに応答する必要があります。私はあなたが望むどのようにこれまでのルーティングが、基本的にそれは/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する必要があります。

これは、FacebookのAPIリクエストを行うコードのビット後:私はここにHTTPパッケージとQueryStringパッケージを使用してい

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. 
    }); 
}); 

APIリクエスト後、ユーザー情報が手元にあります。これで、認証されたユーザーをセッションに格納するなどの作業を行うことができます。たとえば、この目的のためにHttpRequest.session。ログアウトするには、セッションからデータを削除するだけです。

これは、Facebook認証を有効にするために必要な手順です。他の多くのWebサイトでも同様のワークフローが期待できます。 OAuth2パッケージが必要な場合もあります。

  • をFacebookの開発者プロファイルと適切なURLでアプリを作成しますので、まとめての

  • アプリIDなどをいくつかの設定で書き留めます。
  • 適切なログインリンクを作成します。
  • Facebookログインによってユーザーがスローされるサーバーサイドコードを書き込みます。
  • 認証されたユーザーを取得するために、いくつかのAPI呼び出しをサーバーに書き込みます。

楽しくお楽しみください!

+5

カイ、サンプルを作成し、readme.mdでgithubに投稿できますか?これは抜き出すための素晴らしいサンプルになるでしょう。 –

2

私は3 part Tutorial about the login/authorization with DartにRikuloのセキュリティ機能を使って書きました。

セキュリティクラスによるログインは簡単です。とにかく、標準的な例では、特定の要件、特にアクション後のルーティング/リダイレクトに合わせていくつかの変更が必要です。

さらに、このチュートリアルにはダミーユーザーのログインが含まれています。これは明らかに本番用のオプションではありません。そのため、あなたは先に行くと、お使いのサーバーと話し、失敗するとログインに成功またはエラー時にユーザーオブジェクトのいずれかを返す次に

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

独自の認証を作成することによりRikuloからのログインのための標準的な機能を@Overrideする必要があります!

希望すると、これが役立ちます。

+0

2014年2月23日にRikulo githubで最後にコミットされました。プロジェクトは終了しましたか? – expert

関連する問題