2012-02-08 43 views
-1

我有兩個用於用戶名和密碼的文本框,現在我希望用戶輸入他們的公司電子郵件ID和密碼(用戶名和密碼由google提供,webserver是谷歌)並登錄到ASP.net website.Create會話的用戶名和密碼。另外,我希望用戶能夠發送電子郵件從asp.net網站使用相同的gmail憑證。感謝您提前和任何類型的幫助將不勝感激。用於驗證ASP.net網站的Gmail憑證

+0

可能重複:http://stackoverflow.com/questions/5435322/authentication-with-google-or-facebook – 2012-02-08 19:22:57

+0

你描述了你的代碼應該做什麼,但你沒有問一個問題。你曾經嘗試過什麼,遇到什麼麻煩? – 2012-02-08 19:23:10

+0

請不要實際要求他們的谷歌帳戶的用戶名和密碼。任何程序員都不應該在計算機附近允許這樣做。 – 2012-02-08 19:31:41

回答

2

我想要的答案是這個,這段代碼工作正常。我不會在會話和數據庫的任何地方存儲密碼。

<form id="form1" runat="server"> 
     <div id="loginform"> 
     <div id="NotLoggedIn" runat="server"> 
      Log in with <img src="http://www.google.com/favicon.ico" /> 
      <asp:Button ID="btnLoginToGoogle" Runat="server" Text="Google"  OnCommand="OpenLogin_Click" 
       CommandArgument="https://www.google.com/accounts/o8/id" /> 
      <p /><asp:Label runat="server" ID="lblAlertMsg" /> 
     </div> 
     </div> 
    </form> 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using DotNetOpenAuth.OpenId; 
using DotNetOpenAuth.OpenId.RelyingParty; 

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     OpenIdAjaxRelyingParty rp = new OpenIdAjaxRelyingParty(); 
     var r = rp.GetResponse(); 
     if (r != null) 
     { 
      switch (r.Status) 
      { 


     case AuthenticationStatus.Authenticated: 
       NotLoggedIn.Visible = false; 
       Session["GoogleIdentifier"] = r.ClaimedIdentifier.ToString(); 
       Response.Redirect("Default2.aspx"); 
       break; 
      case AuthenticationStatus.Canceled: 
       lblAlertMsg.Text = "Cancelled."; 
       break; 
     } 

    } 

} 
protected void OpenLogin_Click(object sender, CommandEventArgs e) 
{ 
    string discoveryUri = e.CommandArgument.ToString(); 
    OpenIdRelyingParty openid = new OpenIdRelyingParty(); 
    var b = new UriBuilder(Request.Url) { Query = "" }; 
    var req = openid.CreateRequest(discoveryUri, b.Uri, b.Uri); 
    req.RedirectToProvider(); 
} 
} 

但我仍然有進一步的懷疑是如何獲得通過用戶登錄到創建會話的用戶名... ???這是可以做到我在什麼地方見過...

+1

用戶名(電子郵件地址)將在成功登錄並重定向Google後返回給您。用戶將會在google.com上被要求授權您的應用程序甚至可以看到該電子郵件地址(僅在第一次成功登錄後纔會看到一次),並且只有在此之後,您纔會收到用戶以及該電子郵件地址。不過,我不知道這方面的技術性。 – 2012-02-09 20:14:47

+0

@Hari我還沒有找到解決方案,在成功登錄後獲取用戶的電子郵件ID ... ???是否可以獲取電子郵件ID? – Gunner 2012-02-18 06:39:15

2

您應該檢查C#的OpenId庫。

http://code.google.com/p/dotnetopenid/

這會給你一個良好的開端。這樣,用戶不必直接使用他的密碼,而是將其重定向到將爲您的站點授權的提供商。

0

那麼,谷歌不會讓你這樣做。你將不得不做類似於StackOverflow正在做的事情(提供OpenID功能來驗證 google.com)。

+0

有些東西像http://www.janrain.com/可以爲我做。他只能從同一個asp.net應用程序發送電子郵件 – Gunner 2012-02-08 19:47:54

+0

我不這麼認爲 - 我只是在那裏觀看了演示視頻,Google的登錄頁面以彈出窗口顯示。所以,雖然你肯定可以在你的頁面上填充uid/pwd文本框,聲稱他們將在谷歌上登錄,但只有一個傻瓜纔會在沒有首先檢查URL的情況下進入它們。所以,即使你設法解決這個問題,我懷疑你會有很多用戶。 – 2012-02-09 00:00:47

+0

我想要的答案是這個 – Gunner 2012-02-09 17:57:45