2013-03-19 193 views

回答

14

認證是一個很大的話題,你沒有詳細說明你想實現的目標,但是讓我指導你爲你的Dart應用程序構建一個Facebook認證,因爲我認爲這是最簡單的一個開始。爲什麼?因爲我們不需要談論你可能使用的每個可能的數據庫,或者你如何設置你的數據庫結構,模型等,以及你如何處理安全性(生成令牌等)。

有了這些知識,您就可以實施其他服務認證(Google+,Twitter),並最終實現您自己的願望。

因此,首先,通過按創建新應用程序,在Facebook apps page上註冊應用程序。你應該得到這個頁面:

enter image description here

(請務必填寫這兩個應用程序域和網站URL)

然後某處指定一些配置文件(如config.dart),您將導入無處不在,你需要:

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

然後,你需要創建一個鏈接的地方。如果您正在使用的Web UI,你的飛鏢腳本可以先導入配置文件以及創建一個登錄網址:你的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'; 
} 

現在你指定的鏈接:

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

在這一點上,也許讀Facebook開發人員指南: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第一。

在此之後,一些代碼,做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開發人員配置,用正確的網址的應用程序。
  • 在某些配置中記下應用程序ID等。
  • 創建正確的登錄鏈接。
  • 將服務器端代碼寫入Facebook登錄引發用戶的位置。
  • 在服務器中編寫一些API調用以檢索經過身份驗證的用戶。

玩得開心!

+5

啓,你可以在github上做一個示例併發布readme.md嗎?這將是一個很好的例子。 – 2013-03-20 02:31:35

2

我寫了一個3 part Tutorial about the login/authorization with Dart使用Rikulo安全功能。

安全類的登錄很簡單。無論如何,標準示例需要進行一些更改以符合您的特定要求,特別是在執行操作之後的路由/重定向。

此外,本教程還包含一個虛擬用戶登錄,這顯然不適用於生產。因此,你需要創建自己的身份驗證,以@override從Rikulo登錄標準功能

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

然後繼續前進,與您的服務器發言,並在成功登錄或錯誤失敗返回一個用戶對象!

希望這可以幫助你!

+0

Rikulo github最後一次提交是在2014年2月23日完成的。項目是否已經死了? – expert 2014-11-22 13:15:07