0

ログイン後にユーザー名を取得したいのですが、うまくいきません。

public partial class Login : System.Web.UI.Page
    {
        string strUser;

        protected void Login1_LoggedIn(object sender, EventArgs e)
        {
            strUser = Membership.GetUser().UserName;

            Response.Redirect("Home");
        }
        protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
        {
            strUser = Membership.GetUser().UserName;
            Response.Redirect("Home");
        }
    }

これは私のエラーです: ここに画像の説明を入力

4

2 に答える 2

1

Membership.GetUser().UserName新しいプリンシパル オブジェクトは現在の HttpContext オブジェクトにまだアタッチされていないため、null です。

そのため、コントロールからユーザー名を使用して、最近ログインしたユーザーを明示的に取得する必要がありますLogin

更新: jadarnel27 の功績

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
  // Get the username from login control and retrieves the user info explicitly
  Membership user = Membership.GetUser(Login1.Username); 
  ...
}
于 2013-03-26T18:07:49.963 に答える
0

ユーザーのログインが成功したことを確認する必要があります。標準の ASP.NET メンバーシップを使用しているように見えるので、これは機能するはずです。

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
    if(e.Authenticated)
    {
        strUser = Membership.GetUser().UserName;
        Response.Redirect("Home");
    }
    else
    {
        strUser = "Login Failed!";
    }
}

これらのコントロールを使用してからしばらく経ちましたが、e.Authenticated最初に自分自身の値を決定して設定する必要があるかもしれません。もしそうなら、これを上で書いたifブロックの前に置く必要があります:

bool authenticated = Membership.ValidateUser(Login1.UserName, Login1.Password);
e.Authenticated = authenticated;

通常の ASP.NET メンバーシップがその部分を処理してくれると思います。カスタム認証スキームを使用している場合は、間違いなくその手順を実行する必要があります。

于 2013-03-26T15:06:27.517 に答える