C# で VS2010 を使用して WebForms Web アプリケーションを開発しています。カスタム ログイン アプローチを使用してユーザーを認証していますが、メンバーシップ フレームワークは使用したくありません。ユーザーのログイン後、ユーザー データを userId、ユーザー名、姓、電子メールなどとして保存したいので、すべてのページでユーザー セッション中にそれらにアクセスできます。
どうやってやるの?UserData
のプロパティにユーザーデータを保存したくありませんFormsAuthenticationTicket
。
私はこのアプローチを見つけました:セッションにユーザーデータを保存するか、カスタムプロファイルプロバイダーを使用する必要がありますか? 、しかし、私はそれを実装する方法を理解していません。
私はいくつかの質問があります:
1) 私が使用する db の資格情報を確認した後、ユーザーを認証するためのログイン ページで: FormsAuthentication.SetAuthCookie(txtUserName.Value, true); 現在、私のデフォルトページには次のようなものがあります:
FormsAuthenticationTicket ticket = ((FormsIdentity)(User.Identity)).Ticket; そして、私は ticket.Name を使用してユーザー名を表示します。それが正しいか?Thread.CurrentPrincipal.Identity.Name を使用してスレッドについて話すのはなぜですか?
2) global.asax ファイルに次のコードを記述して、ユーザー ロールを読み取り、それらを HttpContext に格納します。
void Application_AuthenticateRequest(オブジェクト送信者, EventArgs e) {
if (Request.IsAuthenticated) {
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SQLConnStr"].ConnectionString);
conn.Open();
SqlCommand cmd = new SqlCommand("SELECT Gruppi.Name FROM Ruoli INNER JOIN Gruppi ON Ruoli.GroupID = Gruppi.GroupID INNER JOIN Utenti ON Ruoli.UserID = Utenti.UserID AND Utenti.Username=@UserName", conn);
cmd.Parameters.AddWithValue("@UserName", User.Identity.Name);
SqlDataReader reader = cmd.ExecuteReader();
ArrayList rolelist = new ArrayList();
while (reader.Read()){
rolelist.Add(reader["Name"]);
}
// roleList.Add(reader("Name"))
string[] roleListArray = (string[])rolelist.ToArray(typeof(string));
HttpContext.Current.User = new GenericPrincipal(User.Identity, roleListArray);
reader.Close();
conn.Close();
}
}
login.aspx ページではなく、global.asax ファイルから書き込んだように、ユーザー データをセッションに保存できますか?