फेसबुक, Vkontakte और Habrahabr के माध्यम से PhoneGap आवेदन में प्राधिकरण

PhoneGap हाय, हबलूसर। हाल ही में, मैंने एक मोबाइल फोन के ऑपरेटिंग सिस्टम के इंटरफ़ेस के बारे में मेरी दृष्टि के बारे में एक लेख लिखा था, लेकिन यह किसी के लिए बहुत कम रुचि थी और मैंने एक आवेदन लिखने का प्रयास करने का फैसला किया, जो विचार को आंशिक रूप से वास्तविकता में बदल देगा, और जब से मैं वेब भाषाओं को छोड़कर बहुत कम जानता हूं, मैंने html5 में एप्लिकेशन लिखने का फैसला किया PhoneGap का उपयोग करके + js + css। और उन्होंने विभिन्न स्रोतों से प्राधिकरण और टोकन या कुकीज़ प्राप्त करना शुरू किया। इत्मीनान से कोडिंग के लिए, यह Facebook, Vkontakte और Habr के लिए प्राधिकरण प्लगइन्स बनाने के लिए निकला (ज्यादातर समय Google पर और एपीआई के लिए दस्तावेज़ीकरण पढ़ने में बिताया गया था)।

यह माना जाता है कि आपने एंड्रॉइड एसडीके (इस ऑपरेटिंग सिस्टम के लिए विकास के लिए), एक्लिप्स और फोनगैप को पहले ही इंस्टॉल कर लिया है और जानते हैं कि एप्लिकेशन बनाना कैसे शुरू करें। यदि नहीं, तो आपको यहां से शुरू करने की आवश्यकता है

प्लगइन्स लिखते समय, आपको एक अतिरिक्त जेएस स्क्रिप्ट की आवश्यकता होगी जो लिंक और कुकीज़ "पार्स" करेगी।
var url_parser={ get_args: function (s) { var tmp=new Array(); s=(s.toString()).split('&'); for (var i in s) { i=s[i].split("="); tmp[(i[0])]=i[1]; } return tmp; }, get_args_cookie: function (s) { var tmp=new Array(); s=(s.toString()).split('; '); for (var i in s) { i=s[i].split("="); tmp[(i[0])]=i[1]; } return tmp; } }; 

मैंने विशेष रूप से लिंक और कुकीज़ के लिए कोड को अलग कर दिया (अचानक कुछ बदल जाएगा), हालांकि उनमें अंतर वर्तमान में न्यूनतम हैं। get_args प्रपत्र param1 = hello & param2 = world की एक पंक्ति लेता है, और get_args_cookie दस्तावेज़ को स्वीकार करता है। अर्थात, param1 = hi रूप की एक स्ट्रिंग; परम 2 = हब्र। आउटपुट पर, हमें फ़ॉर्म कुंजी => मान का एक सरणी मिलता है।

Vkontakte और फेसबुक


Vkontakte और Facebook प्राधिकरण के समान तरीकों का उपयोग करते हैं, अर्थात् फ़ॉर्म का URL (जिस पर उपयोगकर्ता को पुनर्निर्देशित किया जाना चाहिए)
oauth.vk.com/authorize?client_id=ID_&scope=_&redirect_uri=http://oauth.vk.com/blank.html&display=touch&response_type=token

www.facebook.com/dialog/oauth?client_id=ID_&scope=_&redirect_uri=http://sovgvd.info/blank.html&response_type=token

जेके अनुप्रयोगों के लिए फेसबुक के विपरीत, VKontakte, अपना स्वयं का पता प्रदान करता है, जबकि फेसबुक को लंबे समय से छोड़े गए व्यक्तिगत ब्लॉग पर एक खाली पृष्ठ बनाना था (हालांकि आप शायद संपर्क पर इसका उपयोग कर सकते हैं)।
सफल प्राधिकरण के बाद के उत्तर भी समान हैं और लंगर के बाद (#) का रूप है:
access_token=&expires_in=__

और VKontakte भी जोड़ता है &user_id=ID_

इन सामाजिक नेटवर्क के पृष्ठों का अनुरोध करने के लिए, InAppBrowser एक्सटेंशन का उपयोग किया जाता है , जो आपके लगभग ब्राउज़र एप्लिकेशन के अंदर ब्राउज़र लॉन्च करता है, जिसके खुले पृष्ठ में आप JS या CSS को एम्बेड कर सकते हैं, साथ ही पेज लोड होने पर हेडर पढ़ सकते हैं।

यह सब जानते हुए, हमें समान विधियों के साथ 2 बहुत समान स्क्रिप्ट मिलीं:
Vkontakte
 var plugin_vk = { wwwref: false, plugin_perms: "friends,wall,photos,messages,wall,offline,notes", auth: function (force) { if (!window.localStorage.getItem("plugin_vk_token") || force || window.localStorage.getItem("plugin_vk_perms")!=plugin_vk.plugin_perms) { var authURL="https://oauth.vk.com/authorize?client_id=12345&scope="+this.plugin_perms+"&redirect_uri=http://oauth.vk.com/blank.html&display=touch&response_type=token"; this.wwwref = window.open(encodeURI(authURL), '_blank', 'location=no'); this.wwwref.addEventListener('loadstop', this.auth_event_url); } }, auth_event_url: function (event) { var tmp=(event.url).split("#"); if (tmp[0]=='https://oauth.vk.com/blank.html' || tmp[0]=='http://oauth.vk.com/blank.html') { plugin_vk.wwwref.close(); var tmp=url_parser.get_args(tmp[1]); window.localStorage.setItem("plugin_vk_token", tmp['access_token']); window.localStorage.setItem("plugin_vk_user_id", tmp['user_id']); window.localStorage.setItem("plugin_fb_exp", tmp['expires_in']); window.localStorage.setItem("plugin_vk_perms", plugin_vk.plugin_perms); } } }; 

फेसबुक
 var plugin_fb = { wwwref: false, plugin_perms: "read_stream,manage_friendlists,read_friendlists,read_mailbox,publish_actions,offline_access", auth: function (force) { if (!window.localStorage.getItem("plugin_fb_token") || force || window.localStorage.getItem("plugin_fb_perms")!=plugin_fb.plugin_perms) { var authURL="https://www.facebook.com/dialog/oauth?client_id=123456&scope="+this.plugin_perms+"&redirect_uri=http://sovgvd.info/blank.html&response_type=token"; this.wwwref = window.open(encodeURI(authURL), '_blank', 'location=no'); this.wwwref.addEventListener('loadstop', this.auth_event_url); } }, auth_event_url: function (event) { var tmp=(event.url).split("#"); if (tmp[0]=='https://sovgvd.info/blank.html' || tmp[0]=='http://sovgvd.info/blank.html') { plugin_fb.wwwref.close(); var tmp=url_parser.get_args(tmp[1]); window.localStorage.setItem("plugin_fb_token", tmp['access_token']); window.localStorage.setItem("plugin_fb_exp", tmp['expires_in']); window.localStorage.setItem("plugin_fb_perms", plugin_fb.plugin_perms); } } }; 


मुख्य जावास्क्रिप्ट के शरीर में अधिकृत करने के लिए, plugin_vk.auth (गलत) चलाएँ; या plugin_fb.auth (झूठा) उसी समय, यदि प्राधिकरण पहले ही पूरा हो चुका है, तो कुछ भी नहीं होगा, यदि एक्सेस अधिकार सूची बदल गई है, प्राधिकरण नहीं हुआ है या मजबूर प्राधिकरण शुरू किया गया है (plugin_vk.auth (true); या plugin_fb.auth (सच);), तो विंडो पर रीडायरेक्ट होगा। सामाजिक नेटवर्क में से एक का लॉगिन।
छोटे नोट
हालांकि मैं समाप्ति मूल्यों को रखता हूं, मैं इसका कहीं भी उपयोग नहीं कर रहा हूं, और यह शायद काम आएगा;)


Habrahabr


हमारे पसंदीदा हब में प्राधिकरण के लिए एपीआई (और साथ ही हर चीज के लिए) नहीं है, इसलिए हम कुकीज़ को पकड़ लेंगे, इसके लिए हमें जावास्क्रिप्ट कोड - एक्ज़ीक्यूटस्क्रिप्ट को लागू करने के लिए InAppBrowser एक्सटेंशन की आवश्यकता होगी। आप कोड या संपूर्ण JS फ़ाइल का एक टुकड़ा एम्बेड कर सकते हैं और कॉलबैक फ़ंक्शन में अंतिम कमांड का परिणाम प्राप्त कर सकते हैं (रिटर्न के साथ भ्रमित नहीं होने के लिए)। यानी कुकीज़ को लागू करने और प्राप्त करने का कोड कुछ इस तरह होगा:
  plugin_habr.wwwref.executeScript({ code: "document.cookie;" }, function(arg) { plugin_habr.auth_event_url(arg); }); 

और हैबर के लिए संपूर्ण प्राधिकरण प्लगइन कोड इस प्रकार है:
Habrahabr
 var plugin_habr = { wwwref: false, auth: function (force) { if (!window.localStorage.getItem("plugin_habr_PHPSESSID") || force) { var authURL="http://habrahabr.ru/login/"; this.wwwref = window.open(encodeURI(authURL), '_blank', 'location=yes'); this.wwwref.addEventListener('loadstop', this.auth_jsinjection); } }, auth_event_url: function (url) { var tmp=url_parser.get_args_cookie(url); if (tmp['PHPSESSID'] && tmp['hsec_id']) { plugin_habr.wwwref.close(); window.localStorage.setItem("plugin_habra_PHPSESSID", tmp['PHPSESSID']); window.localStorage.setItem("plugin_habra_hsec_id", tmp['hsec_id']); } }, auth_jsinjection: function () { plugin_habr.wwwref.executeScript({ code: "document.cookie;" }, function(arg) { plugin_habr.auth_event_url(arg); }); } } 

प्राधिकरण कॉल पिछले प्लगइन्स plugin_habr.auth (गलत) के समान किया जाता है;

यकीन नहीं होता कि यह किसी के लिए उपयोगी है, लेकिन अचानक। इसके अलावा, यह एक तथ्य नहीं है कि मैं अपने विचार को दिमाग में लाऊंगा, लेकिन यह कोड के टुकड़ों को खोने के लिए एक दया होगी।

Source: https://habr.com/ru/post/In181007/


All Articles