0

私はこれを理解するのに苦労しており、本当にこれが機能する必要があります。User.Identity.NameMVC 4の値を組み込み認証でオーバーライドする必要があります。

これが私のコントローラーです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;たが、うまくいきませんでした。

4

1 に答える 1