2013-03-19 10 views
7

मैं डार्ट के साथ उपयोगकर्ता प्रमाणीकरण का एक सरल उदाहरण खोजने की कोशिश कर रहा हूं। अब तक मुझे सबसे नज़दीकी पाया गया है https://github.com/dart-lang/bleeding_edge/blob/master/dart/tests/standalone/io/http_auth_test.dart। क्या कोई मुझे डार्ट का उपयोग कर सर्वर साइड प्रमाणीकरण के एक कामकाजी उदाहरण को निर्देशित या प्रदान कर सकता है। अग्रिम में धन्यवाद।डार्ट लॉगिन/लॉगआउट उदाहरण

उत्तर

14

प्रमाणीकरण एक विशाल विषय है और आपने जो कुछ हासिल करना चाहते हैं उसे निर्दिष्ट नहीं किया है, लेकिन मुझे आपके लिए डार्ट एप्लिकेशन के लिए एक फेसबुक प्रमाणीकरण बनाने के लिए मार्गदर्शन करने दें, क्योंकि मुझे लगता है कि यह शुरू करने वाला सबसे आसान तरीका है। क्यूं कर? चूंकि हमें आपके द्वारा उपयोग किए जा रहे हर संभावित डेटाबेस, या आप अपनी डेटाबेस संरचना, मॉडल इत्यादि कैसे सेट अप करते हैं और आप सुरक्षा के साथ कैसे निपटते हैं (टोकन इत्यादि) आदि के बारे में बात करने की आवश्यकता नहीं है।

इस ज्ञान के साथ आप अन्य सेवा प्रमाणीकरण (Google+, ट्विटर) और अंत में अपनी इच्छानुसार लागू कर सकते हैं।

तो, पहले, पर दबाकर एक आवेदन पंजीकृत करें नया ऐप बनाएं। तो आप इस पेज मिलना चाहिए:

enter image description here

फिर कुछ विन्यास फाइल कहीं निर्दिष्ट (जैसे config.dart) आप हर जगह आयात करेगा तुम्हारी जरूरत है (दोनों अनुप्रयोग डोमेन और साइट यूआरएल को भरना सुनिश्चित करें):

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

फिर आपको कहीं एक लिंक बनाना होगा। आप वेब UI का उपयोग कर रहे हैं, तो अपने डार्ट स्क्रिप्ट पहले config आयात और एक लॉगिन यूआरएल बना सकते हैं: इस बिंदु पर

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

आप लिंक निर्दिष्ट फेसबुक डेवलपर मार्गदर्शिका: https://developers.facebook.com/docs/reference/dialogs/oauth/

फेसबुक लॉगिन संवाद उपयोगकर्ता को कॉन्फ़िगरेशन (/login/facebook) में निर्दिष्ट यूआरएल पर फेंक देगा, तो हमारे आवेदन को इसका जवाब देना होगा। मैं तुम्हें मार्ग आप कैसे कभी चाहते हैं, लेकिन अनिवार्य रूप से सर्वर जब यह एक /login/facebook अनुरोध प्राप्त करता है, यह पहली encodes कुछ गुण संभालने दें:

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 अनुरोध करता है का एक सा:

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। लॉगआउट करने के लिए, बस सत्र से डेटा हटा दें।

यह मोटे तौर पर प्रक्रिया आप काम करने के लिए फेसबुक प्रमाणीकरण प्राप्त करने के लिए क्या करने की जरूरत है। आप कई अन्य वेबसाइटों के लिए समान वर्कफ़्लो की अपेक्षा कर सकते हैं। आपको OAuth2 पैकेज की आवश्यकता/उपयोग भी हो सकती है।

तो संक्षेप में प्रस्तुत करने के लिए:

  • फेसबुक डेवलपर प्रोफ़ाइल और उचित यूआरएल के साथ एक ऐप्लिकेशन बनाएं।
  • ऐप आईडी और कुछ कॉन्फ़िगरेशन में लिखें।
  • उचित लॉगिन लिंक बनाएं।
  • फेसबुक साइड कोड लिखें जहां फेसबुक लॉगिन उपयोगकर्ताओं को फेंकता है।
  • प्रमाणीकृत उपयोगकर्ता को पुनर्प्राप्त करने के लिए सर्वर में कुछ एपीआई कॉल लिखें।

मज़े करो!

+5

काई, क्या आप एक readme.md के साथ एक नमूना बना सकते हैं और github पर पोस्ट कर सकते हैं? यह धक्का देने के लिए एक महान नमूना होगा। –

2

मैंने रिकुलो सुरक्षा सुविधा का उपयोग करके 3 part Tutorial about the login/authorization with Dart लिखा था।

सुरक्षा वर्ग के साथ लॉगिन सीधे आगे है। वैसे भी, मानक उदाहरण को आपकी विशिष्ट आवश्यकताओं से मेल खाने के लिए कुछ बदलावों की आवश्यकता होती है, विशेष रूप से रूटिंग/क्रियाओं के बाद पुनर्निर्देशन।

इसके अलावा ट्यूटोरियल में एक डमी उपयोगकर्ता लॉगिन शामिल है, जो स्पष्ट रूप से उत्पादन के लिए कोई विकल्प नहीं है। इसलिए, आप अपने खुद के प्रमाणक बनाकर Rikulo से प्रवेश के लिए मानक समारोह @override को

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

फिर आगे जाना है और आपके सर्वर के साथ बोलते हैं और सफल प्रवेश या त्रुटि पर या तो एक उपयोगकर्ता ऑब्जेक्ट प्रदान विफलता पर की जरूरत है!

उम्मीद है कि यह आपकी मदद करता है!

+0

रिकुलो गिथब में अंतिम प्रतिबद्धता 23 फरवरी 2014 को बनाई गई थी। क्या परियोजना मर गई है? – expert