メンバーシップとフォーム認証を使用する Web サイトがあります。
ASP.NET ページ:
<asp:LoginView
ID="HeadLoginView" ...
<AnonymousTemplate>
<asp:Login ID="LoginUser" OnLoggedIn="LoginUser_LoggedIn" ... >
<LayoutTemplate>
<asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">Username:</asp:Label>
<asp:TextBox ID="UserName" runat="server" CssClass="textEntry"></asp:TextBox>
<asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">Password:</asp:Label>
<asp:TextBox ID="Password" runat="server" CssClass="passwordEntry" TextMode="Password"></asp:TextBox>
<asp:CheckBox ID="RememberMe" runat="server"/>
<asp:Label ID="RememberMeLabel" runat="server" AssociatedControlID="RememberMe" CssClass="inline">Remember me.</asp:Label>
<asp:Button ID="LoginButton" runat="server" CommandName="Login" Text="Login" style="width:100%; height:35px"/>
</LayoutTemplate>
</asp:Login>
</AnonymousTemplate>
...
</asp:LoginView>
コードビハインド:
protected void LoginUser_LoggedIn(object sender, EventArgs e)
{
MembershipUser user = Membership.GetUser();
if (Roles.IsUserInRole(user.UserName, "User"))
{
// Do something and redirect to user page...
}
if (Roles.IsUserInRole(user.UserName, "Admin"))
{
// Do something and redirect to admin page...
}
}
問題は、Membership.GetUser()
常に null を返すことです。ユーザー名を取得しようとしましPage.User.Identity.Name
たが、常に空の文字列です。現在ログインしているユーザーのユーザー名を見つける方法はあります<asp:LoginView>
か<asp:Login>
?
編集:
MSDN: Login.LoggedIn Event Occurs when the user logs in to the Web site and has been authenticated.
(リンク) 問題は、ユーザー認証後に Membership.GetUser() が null を返すのはなぜですか?
私の同僚の 1 人は、Membership.GetUser()
useを使用する代わりにMembership.GetUser(UserNameTextBox.Text)
、ユーザーはこのユーザー名で認証されているので問題ないと言いましたが、問題は、 を取得する方法が見つからないことですUsername.Text
。使用findControl()
してエラーが発生しました。
何か案が?