【问题标题】:How do I prevent a user from accessing a route through the search bar?如何防止用户通过搜索栏访问路线?
【发布时间】:2019-08-24 00:39:40
【问题描述】:

我正在开发这个 Dotnet 核心 MVC/Razor Pages 应用程序,它应该防止用户通过搜索栏访问某些控制器路由,除非他们在注册表单中指定了它。我如何实现这一目标? dotnet core MVC 是否有此关键字?我被困住了。下面是一些显示注册的 Identity/Account/Register 相关代码

  [Required]
            [Display(Name = "Choose businesslisting or choice")]
            public string Decision { get; set; }
        }
   public void OnGet(string returnUrl = null)
        {
            ReturnUrl = returnUrl;
        }

        public async Task<IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl = returnUrl ?? Url.Content("~/");
            if (ModelState.IsValid)
            {
                var user = new IdentityUser { UserName = Input.Email, Email = Input.Email };
                var result = await _userManager.CreateAsync(user, Input.Password);

                if (Input.Decision == "Business Listing" || Input.Decision == "business listing")
                {

                    if (result.Succeeded)
                    {

                        _logger.LogInformation("User created a new account with password.");

                        var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
                        var callbackUrl = Url.Page(
                            "/Account/ConfirmEmail",
                            pageHandler: null, 
                            values: new { userId = user.Id, code = code },
                            protocol: Request.Scheme);

                        await _emailSender.SendEmailAsync(Input.Email, "Change your password",
                       $"Please change your password by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");

                        await _signInManager.SignInAsync(user, isPersistent: false);
                        return LocalRedirect(returnUrl);
                    }
}

【问题讨论】:

  • 几个问题可能有助于澄清您的问题。搜索栏是什么意思?您指的是浏览器中的地址栏吗?他们将如何在注册表中指定它?即它是通过一个字段传递的吗?字段名称是什么?首先,您可以查看 ASP.Net Core 授权文档:docs.microsoft.com/en-us/aspnet/core/security/authorization/…
  • 您所能做的就是对路由应用授权以一般允许或禁止特定用户或角色的访问。如果您需要更高级的授权确定,您可以使用自定义策略。但是,无论您如何授权,您都无法根据用户是否直接在地址栏中输入URL或单击链接等内容进行排除。这只是一个请求,无论它是如何进来的。跨度>

标签: c# asp.net-core-mvc razor-pages


【解决方案1】:

我将从 ASP.NET Core 授权文档https://docs.microsoft.com/en-us/aspnet/core/security/authorization/introduction?view=aspnetcore-2.2开始

您可能会发现基于声明的身份验证在这种情况下很有用 https://docs.microsoft.com/en-us/aspnet/core/security/authorization/claims?view=aspnetcore-2.2

在创建用户时,您可以添加特定的声明,允许他们访问特定的控制器/url。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-05
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多