4

HttpContext.User の使用方法について本当に迷っています。FormAutherication に最適であることはどこでも読んでいますが、それがどのように機能するのかわかりません。私がこのようなことをした場合:

ControllerContext.HttpContext.User = new GenericPrincipal(GetUser(username, password), roles);

ControllerContext.HttpContext.User には何が含まれていますか? この方法でユーザーに関する情報にアクセスするにはどうすればよいですか?

私は次のようなアクションを持っていると思います:

public User GetUser(string username, string password)
    {
        try
        {
            var user = (from u in dm.Users
                        join r in dm.Roles
                        on u.Role_ID_FK equals r.RoleID
                        where u.Username.Equals(username) && u.Password.Equals(password)
                        select u).Single();

            return user;
        }
        catch (Exception e)
        {
            return null;
        }
    }

そして、ユーザー名やロールなどのユーザー情報がビューに必要な場合は、View で ControllerContext.HttpContext.User.Username を呼び出すことができます。しかし、これは明らかに間違った見方です。

それで、皆さんは私に正しい方向へのキックを与えるか、できるサイトへのリンクを投稿できますか?

4

2 に答える 2

9

投稿したコードで何をしようとしているのか正確にはわかりませんが、HttpContext.Userに関するヘルプがいくつかあります。素人の用語では、特定のページを要求している現在のユーザーを表し、実際にはコントローラー内でプレフィックスなしの「ユーザー」として参照できます。

User.Identityは、ユーザーが認証されているかどうか、認証されている場合はユーザー名と認証方法(フォームまたはWindows)を通知します。

これは通常、ページを要求しているユーザーのユーザー名を取得して、コントローラーのアクションが正しい職務を実行できるようにするために使用されます。何かのようなもの:

public ActionResult Index()
{
    //you should probably use the [Authorize] attribute on the Action Method
    //but you could check for yourself whether the user is authenticated...
    if (!User.Identity.IsAuthenticated)
         return RedirectToAction("LogIn");

    MyUser u = repository.GetUser(User.Identity.Name); //lookup user by username
    ViewData["fullname"] = u.FullName; //whatever...
    return View();
}

この例では、ユーザーが認証されていない場合、ユーザーはLogOnページにリダイレクトされます。認証されている場合、ActionメソッドはUser.Identity.Name(ログインに使用したユーザー名、またはWindowsログイン)を使用して、データベースからMyUserオブジェクトのインスタンスを検索して返し、ユーザーのフルネームをViewDataに配置して表示します。

于 2009-08-26T16:13:33.507 に答える
4

ログイン コードで次を使用します。

FormsAuthentication.SetAuthCookie("userName", remeberMe);

認証されたユーザーを設定するには、次を使用できます

<%= User.Identity.Name %>
<%= User.IsInRole("role") %>
于 2009-08-26T15:36:25.220 に答える