У меня есть три страницы: Login.aspx, Index.aspx и файл класса C # с именем GlobalData.cs
Код, указанный за Login.aspx, для получения информации о пользователе от Google и для отображения на Index.aspx
Вот код:
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;
using OpenIdTest;
using DotNetOpenAuth.OpenId.Extensions.SimpleRegistration;
using System.Web.Security;
using DotNetOpenAuth.OpenId.Extensions.AttributeExchange;
public partial class Account_Login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
FuncOpenID();
}
protected void FuncOpenID()
{
OpenIdRelyingParty OIDRP = new OpenIdRelyingParty();
var response = OIDRP.GetResponse();
if (response != null)
{
switch (response.Status)
{
case AuthenticationStatus.Authenticated:
var fetchResponse = response.GetExtension<FetchResponse>();
Session["GoogleIdentifier"] = fetchResponse;
var Testresponse = Session["GoogleIdentifier"] as FetchResponse;
GlobalData.Email = Testresponse.GetAttributeValue(WellKnownAttributes.Contact.Email) ;
GlobalData.Name = Testresponse.GetAttributeValue(WellKnownAttributes.Name.First) ;
GlobalData.LastName = Testresponse.GetAttributeValue(WellKnownAttributes.Name.Last);
FormsAuthentication.RedirectFromLoginPage(GlobalData.Email, false); //(response.ClaimedIdentifier, false);
FormsAuthentication.RedirectFromLoginPage(GlobalData.Name, false);
FormsAuthentication.RedirectFromLoginPage(GlobalData.LastName, false);
break;
case AuthenticationStatus.Canceled:
break;
case AuthenticationStatus.Failed:
break;
}
}
}
protected void OpenLogin_Click(object src, CommandEventArgs e)
{
string StrUri = e.CommandArgument.ToString();
OpenIdRelyingParty openid = new OpenIdRelyingParty();
var b = new UriBuilder(Request.Url) { Query = "" };
var req = openid.CreateRequest(StrUri);
var fetchRequest = new FetchRequest();
fetchRequest.Attributes.AddRequired(WellKnownAttributes.Contact.Email);
fetchRequest.Attributes.AddRequired(WellKnownAttributes.Name.First);
fetchRequest.Attributes.AddRequired(WellKnownAttributes.Name.Last);
req.AddExtension(fetchRequest);
req.RedirectToProvider();
}
protected void btnLoginToGoogle_Click(object sender, EventArgs e)
{
}
}
Обновление
И код файла класса ниже:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace OpenIdTest
{
public class GlobalData
{
public string Email = "";
public string Name = "";
public string LastName = "";
public string test = "";
public string FullName = "";
}
А код Index.aspx находится ниже:
namespace OpenIdTest
{
public partial class Rights : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Session["U_EMAIL"] = GlobalData.Email;
Session["U_NAME"] = GlobalData.Name;
Session["U_LASTNAME"] = GlobalData.LastName;
OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=|DataDirectory|OID.mdb;Persist Security Info=False;");
con.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.CommandText = "Select * from EMAILS WHERE FLAG='Allowed' and EMAIL= '" + GlobalData.Email + "'";
cmd.CommandType = CommandType.Text;
cmd.Connection = con;
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
foreach (DataRow row in ds.Tables[0].Rows)
{
String email = row["EMAIL"].ToString();
if (email == null)
{
Response.Redirect("Login.aspx");
}
else
{
Label2.Text = Session["U_EMAIL"].ToString();
Label1.Text = Session["U_NAME"].ToString();
Label3.Text = Session["U_LASTNAME"].ToString();
Label1.Visible = false;
Label3.Visible = false;
Label4.Text = Label1.Text + ' ' + Label3.Text;
}
}
con.Close();
}
}
}
Сейчас я пишу о своей серьезной проблеме, с которой я сталкиваюсь. Мой механизм использования openid для моей веб-страницы заключается в том, что, когда пользователь нажимает кнопку «Войти» на Login.aspx, он переводит пользователя в почту Google после аутентификации в Google, когда пользователь возвращается к Index.aspx.А вот здесь, на INdex.aspx, я заново аутентифицировал пользователя из моей собственной БД, что если электронная почта, возвращенная Google, существует в моей БД, то пользователь должен просмотреть страницу, а если электронная почта не существует в БД, то пользователь Переадресация на Login.aspx.Ok Теперь проблема в том, что когда я вошел в Index.aspx после аутентификации как в Google, так и в Моей собственной БД, Index.aspx отображает точную информацию, такую как полное имя электронной почты и т. Д. На Index.aspx.и означает, что при входе в систему в Index.aspx из любого другого браузера или ПК или сеанса, а затем также пользователь вошел в Index.aspx Succesfuly. И когда я обновляю First Logged Index.aspx, он отображает информацию о втором зарегистрированном пользователе на текущей странице Index.aspx. Несколько пользователей пытаются войти в Index.as px затем При каждом обновлении на Index.aspx выводится информация о последнем входе пользователя в Index.aspx на Index.aspx.Can Кто-нибудь скажет мне, что именно я пропускаю Вот почему отображается эта проблема. Я установил весь код на всех страницах помогите пожалуйста что добавить в код или удалить из кода