繁体   English   中英

在 ASP.NET 内核中制作一个注销按钮

[英]Make a logout button in ASP.NET Core

我是 ASP.NET Core 的新手,我通过 session 创建了一个简单身份验证的登录页面。 我正在尝试制作一个可以将您注销的按钮,但我不知道该怎么做。 这就是我想出的:

这是我的 controller:

public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;
        IConfiguration _Configuration;
        SecurityService _securityService;

        public HomeController(ILogger<HomeController> logger,
            IConfiguration configuration,
            SecurityService securityService)
        {
            _logger = logger;
            _Configuration = configuration;
            _securityService = securityService;
        }

        public IActionResult Index()
        {
            var loggedIn = HttpContext.Session.GetString("SessionUser");
            if(loggedIn == "admin")
            {
                return View();
            }
            else
            {
                return View("Login");
            }
        }

        public IActionResult Login(UserModel user)
        {
            Boolean success = _securityService.Authenticate(user, _Configuration);
            

            if (success)
            {
                HttpContext.Session.SetString("SessionUser", user.Username);
                return RedirectToAction("Index");
            }
            else
            {
                return View("Login");
            }
        }

        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult Error()
        {
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }
    }

这是我的 SecurityDAO,我在其中查找用户是否存在于数据库中:

public class SecurityDAO
    {
        internal bool FindByUser(UserModel user, IConfiguration Configuration)
        {
            string connectionString = Configuration["ConnectionStrings:Database"];
            bool success = false;

            string queryString = "SELECT * FROM users WHERE username = @username AND password = @password";

            using (MySqlConnection connection = new MySqlConnection(connectionString))
            {
                MySqlCommand command = new MySqlCommand(queryString, connection);

                command.Parameters.Add("@username", MySqlDbType.VarChar, 50).Value = user.Username;
                command.Parameters.Add("@password", MySqlDbType.VarChar, 50).Value = user.Password;

                try
                {
                    connection.Open();
                    MySqlDataReader reader = command.ExecuteReader();

                    if (reader.HasRows)
                    {
                        success = true;
                    }
                    else
                    {
                        success = false;
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
            return success;
        }
    }

这是我的安全服务:

public class SecurityService
    {
        SecurityDAO daoService = new SecurityDAO();

        public bool Authenticate(UserModel user, IConfiguration Configuration)
        {
            return daoService.FindByUser(user, Configuration);
        }
    }

预先感谢! 最好的问候马克斯

您可以为您的视图创建一个锚元素并使用asp-action标记在 controller 中调用适当的操作方法:

<a class="btn" asp-action="Logout" asp-controller="Home">Logout</a>

如果您想在用户登录时隐藏此按钮,您可以将 model 字符串传递给 controller 中的视图,并使用您的SessionUser数据确定是否显示该按钮

@if(!string.IsNullOrEmpty(Model.SessionUser))
{
    <a class="btn" asp-action="Logout" asp-controller="Home">Logout</a>
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM