私のプロジェクトでuLogin( ハブのレビュー )を使用するかどうかの選択について、 いくつかの数字が影響しました。 私たちは何らかの理由でこれで十分でしたが、私たちは資源の権威には立ち入りません。 このサービスは非常にシンプルで便利です。サイトのアドレスを指定し、必要な認証プロバイダーのボタンを選択して、サイトに配置する必要のあるコードを取得します。 htmlコードがサイトの作成内容に実際に依存していない場合、提案されたphpコードはどういうわけか機能しませんでした。 結果は何が起こったかです:)
結果のhtmlは、サイトのマスターページに投稿しました。
< script src ="http://ulogin.ru/js/ulogin.js" ></ script > < div id ="uLogin" x-ulogin-params ="display=small;optional=email,sex;fields=first_name,last_name,photo;providers=vkontakte,facebook,twitter,odnoklassniki,google;hidden=yandex,mailru,livejournal,openid,liveid;redirect_uri=http%3A%2F%2Fmysite.ru%2Fauth.aspx" ></ div > * This source code was highlighted with Source Code Highlighter .
< script src ="http://ulogin.ru/js/ulogin.js" ></ script > < div id ="uLogin" x-ulogin-params ="display=small;optional=email,sex;fields=first_name,last_name,photo;providers=vkontakte,facebook,twitter,odnoklassniki,google;hidden=yandex,mailru,livejournal,openid,liveid;redirect_uri=http%3A%2F%2Fmysite.ru%2Fauth.aspx" ></ div > * This source code was highlighted with Source Code Highlighter .
< script src ="http://ulogin.ru/js/ulogin.js" ></ script > < div id ="uLogin" x-ulogin-params ="display=small;optional=email,sex;fields=first_name,last_name,photo;providers=vkontakte,facebook,twitter,odnoklassniki,google;hidden=yandex,mailru,livejournal,openid,liveid;redirect_uri=http%3A%2F%2Fmysite.ru%2Fauth.aspx" ></ div > * This source code was highlighted with Source Code Highlighter .
< script src ="http://ulogin.ru/js/ulogin.js" ></ script > < div id ="uLogin" x-ulogin-params ="display=small;optional=email,sex;fields=first_name,last_name,photo;providers=vkontakte,facebook,twitter,odnoklassniki,google;hidden=yandex,mailru,livejournal,openid,liveid;redirect_uri=http%3A%2F%2Fmysite.ru%2Fauth.aspx" ></ div > * This source code was highlighted with Source Code Highlighter .
アドレスredirect_uriは、ユーザーが選択したプロバイダーを介して許可を渡した後、ユーザーが(uLoginトークンで)送信される場所を示します。 トークンを受け取ったら、uLoginにアクセスしてユーザー情報を要求する必要があります。
- string link = string .Format( "http://ulogin.ru/token.php?token={0}&host={1}"、Request.Form [ "token" ]、
- Request.ServerVariables [ "SERVER_NAME" ]);
- WebRequest reqGET = WebRequest.Create(リンク);
- string answer = "" ;
- 使用 (WebResponse resp = reqGET.GetResponse())
- {
- 使用 ( ストリームストリーム= resp.GetResponseStream())
- {
- if (stream!= null )
- 使用 (StreamReader sr = 新しい StreamReader(ストリーム))
- {
- answer = sr.ReadToEnd();
- }
- }
- }
応答として、jSON文字列を取得します。これを次のように処理することにしました。
- パブリック クラス JSONHelper
- {
- public static T Deserialise <T>( string json)
- {
- T obj = Activator.CreateInstance <T>();
- using (MemoryStream ms = new MemoryStream( Encoding .Unicode.GetBytes(json)))
- {
- DataContractJsonSerializerシリアライザー= 新しい DataContractJsonSerializer(obj.GetType());
- obj =(T)serialiser.ReadObject(ms);
- }
- return obj;
- }
- }
- パブリック クラス iUser
- {
- パブリック ストリング Network { get ; セット ; }
- パブリック ストリング Uid { get ; セット ; }
- パブリック ストリング FirstName { get ; セット ; }
- パブリック ストリング LastName { get ; セット ; }
- パブリック ストリングメール{ get ; セット ; }
- パブリック ストリングセックス{ get ; セット ; }
- パブリック オーバーライド 文字列 ToString()
- {
- 戻り 文字列 .Format( "network = {0}、uid = {1}、first_name = {2}、last_name = {3}" 、Network、Uid、FirstName、LastName);
- }
- }
ULoginは、 他のいくつかの属性を要求できます 。 不要な質問でユーザーを困らせないように、オプションのパラメーターにいくつかを追加しました(プロバイダーがパスできない場合は、メールアドレスを入力しましょう)
シリアル化解除のままです:
- iUser usr = JSONHelper.Deserialise <iUser>(答え);
それでは、受信したデータをどう処理するかは誰もが自分で決定します。 例として、それをデータベースに入れて、サイトでの承認用のトークンを含むCookieをユーザーに送信します。
アカウントでテスト済み。 もっと広範囲に使用すると、既存のバグを特定できるかもしれません。
解決策が短いだけでなく、役に立つことを願っています。