私は、Webサイトの主要な注文部分に進む前に、ユーザーがログインすることを要求する並べ替えシステムを構築しています。たとえば、ユーザーがデータベースに存在する場合、そのIDとUserNameをセッションに割り当てるログインコントローラがあります。コントローラメソッドへのアクセスを制限する
public ActionResult Login(AccountAccess userObj)
{
if (ModelState.IsValid)
{
using (SC_DBEntities db = new SC_DBEntities())
{
var accountObj = db.Users_Account.Where(u => u.Account_UserName.Equals(userObj.Account_UserName)).FirstOrDefault();
if (accountObj != null)
{
var accessObj = db.Users_Access.Where(a => a.Account_ID.Equals(accountObj.Account_ID) && a.Access_Password.Equals(userObj.Access_Password)).FirstOrDefault();
if (accessObj != null)
{
Session["Account_ID"] = accountObj.Account_ID.ToString();
Session["Account_UserName"] = accountObj.Account_UserName.ToString();
return RedirectToAction("Index", "Home");
}
}
}
}
return View(userObj);
}
ここからやりたいことは、そのSessionがnullの場合、他のメソッドアクションへのアクセスをブロックすることです。たとえば、商品ページにアクセスしたいがログインしていない場合は、ログインページにリダイレクトされます。
私はまだASP.NETにはまだ新しいので、セッション以外の効果をより効率的に実現する方法があれば教えてください。
https://docs.microsoft.com/en-us/aspnet/mvc/overview/older-versions-1/controllers-and-routing/understanding-action-filters-cs、http://stackoverflow.com/questions/21231751/authorize-filter-and-authentication始めるのに良い場所です。基本的には、承認アクションフィルタを使用して、アクセスを許可するかどうかを決定します。 – ps2goat
技術的には、「アイデンティティ」はセッションより優れていると思われますが、私もセッションを使用しています。あなたが必要とするのは、あなたの後にユーザーが見つからなかったときに対処する必要があるだけです。あなたが求めているのはそれだけですか? – Rinktacular
@Rinktacular、そうではありません。つまり、誰かがウェブサイトを使っているが、まだログインしていないということです。ホームページからは、ログインページや登録ページへのアクセス方法を選択できます。私が達成しようとしているのは、まだログインしていないホームページを見ている人がいるということです。彼らは注文リンクをクリックしますが、注文ページに転送されるのではなくログインページに転送されます。基本的には、ログインしていない人が他のコントローラメソッドにアクセスするのをやめさせようとしています。 – LittleAngryProgrammer