我很難弄明白這一點,並且確實需要這個工作。我必須使用內置認證覆蓋MVC 4中User.Identity.Name
的值。在內置MVC 4身份驗證中重寫User.Identity.Name
這裏是我的控制器Login()
:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
//OLD CODES:
//if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
//{
// return RedirectToLocal(returnUrl);
//}
// check if correct credentials
if (ModelState.IsValid && IsValidUser(model.UserName, model.Password))
return RedirectToAction("Index", "Home");
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return View(model);
}
注意,我修改了WebSecurity.Login(model.UserName, model.Password)
爲IsValidUser(model.UserName,model.Password)
檢查用戶帳戶和正常工作。
我想要的是如果登錄成功,則覆蓋User.Identity.Name
的值。
這裏是我的IsValidUser(model.UserName,model.Password)
方法:
public bool IsValid(string _username, string _pwd)
{
_username = _username.Trim();
OleDbConnection conn = new OleDbConnection();
string strCon = string.Format(GlobalDBStrings.CONNSTRING, _username, _pwd);
conn.ConnectionString = strCon;
bool isConnected = false;
try
{
conn.Open();
if (conn.State.ToString() == "Open")
{
// I WANT TO MODIFY THE VALUE OF User.Identity.Name here
// User.Identity.Name = ?
isConnected = true;
}
}//try
catch (Exception ex)
{
}//catch
finally
{
conn.Close();
conn.Dispose();
}//finally
return isConnected;
}
到目前爲止,我已經試過User.Identity.Name = _username;
,但根本不起作用。
所有頁面都可以訪問User.Identity.Name嗎?像會議?對不起,我是MVC 4的新手 –
是的,無論何處你都有一個'HttpContext',這在所有控制器操作和視圖中都是非常容易的。 –
是的。我現在開始工作了。非常感謝。但還有一個問題,安全嗎?或者如果有更好的方法來做這個,你有什麼建議嗎?順便說一句,我使用Oracle作爲數據庫。 –