ASP.Net WebサイトのuLogin

uLoginをasp.netサイトに固定するには数日かかりましたが、完成したコードがすぐに見つかりませんでした。 間違いなく誰かがこの問題に遭遇します...





私のプロジェクトで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 .



  1. < 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 .



  2. < 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にアクセスしてユーザー情報を要求する必要があります。



  1. string link = string .Format( "http://ulogin.ru/token.php?token={0}&host={1}"、Request.Form [ "token" ]、
  2. Request.ServerVariables [ "SERVER_NAME" ]);
  3. WebRequest reqGET = WebRequest.Create(リンク);
  4. string answer = "" ;
  5. 使用 (WebResponse resp = reqGET.GetResponse())
  6. {
  7. 使用ストリームストリーム= resp.GetResponseStream())
  8. {
  9. if (stream!= null
  10. 使用 (StreamReader sr = 新しい StreamReader(ストリーム))
  11. {
  12. answer = sr.ReadToEnd();
  13. }
  14. }
  15. }




応答として、jSON文字列を取得します。これを次のように処理することにしました。



  1. パブリック クラス JSONHelper
  2. {
  3. public static T Deserialise <T>( string json)
  4. {
  5. T obj = Activator.CreateInstance <T>();
  6. using (MemoryStream ms = new MemoryStream( Encoding .Unicode.GetBytes(json)))
  7. {
  8. DataContractJsonSerializerシリアライザー= 新しい DataContractJsonSerializer(obj.GetType());
  9. obj =(T)serialiser.ReadObject(ms);
  10. }
  11. return obj;
  12. }
  13. }
  14. パブリック クラス iUser
  15. {
  16. パブリック ストリング Network { get ; セット ; }
  17. パブリック ストリング Uid { get ; セット ; }
  18. パブリック ストリング FirstName { get ; セット ; }
  19. パブリック ストリング LastName { get ; セット ; }
  20. パブリック ストリングメール{ get ; セット ; }
  21. パブリック ストリングセックス{ get ; セット ; }
  22. パブリック オーバーライド 文字列 ToString()
  23. {
  24. 戻り 文字列 .Format( "network = {0}、uid = {1}、first_name = {2}、last_name = {3}" 、Network、Uid、FirstName、LastName);
  25. }
  26. }




ULoginは、 いくつかの属性を要求できます 。 不要な質問でユーザーを困らせないように、オプションのパラメーターにいくつかを追加しました(プロバイダーがパスできない場合は、メールアドレスを入力しましょう)



シリアル化解除のままです:



  1. iUser usr = JSONHelper.Deserialise <iUser>(答え);




それでは、受信したデータをどう処理するかは誰もが自分で決定します。 例として、それをデータベースに入れて、サイトでの承認用のトークンを含むCookieをユーザーに送信します。



アカウントでテスト済み。 もっと広範囲に使用すると、既存のバグを特定できるかもしれません。

解決策が短いだけでなく、役に立つことを願っています。



All Articles