asp.net 如何禁用新用户注册使用身份核心3.1?

8mmmxcuj  于 2023-10-21  发布在  .NET
关注(0)|答案(3)|浏览(119)

我有一个ASP.NET Core 3.1。我需要暂时阻止新用户注册。
我怎么能这么做呢?
注册服务时,我尝试查看选项,但没有看到允许我禁用注册的选项。

services.AddIdentity(options => 
{

});
aiazj4mn

aiazj4mn1#

似乎没有这样一个选项来禁用注册。但你可以手动进行一些更改。
你可以先搭建两个身份页面:Account\Register,Account\Login
编辑Register.cshtml.cs。如果用户登录到注册页面,则将其重定向到登录页面。

public class RegisterModel : PageModel
{
    public IActionResult OnGet()
    {
        return RedirectToPage("Login");
    }

    public IActionResult OnPost()
    {
        return RedirectToPage("Login");
    }
}

编辑Areas/Identity/Pages/Account/Register.cshtml,使其看起来像下面这样。

@page
@model RegisterModel
@{
ViewData["Title"] = "Go to Login";
}

<h1>@ViewData["Title"]</h1>

<li class="nav-item">
    <a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Login">Login</a>
</li>

从Areas/Identity/Pages/Account/Login.cshtml中删除注册链接

@*
<p>
    <a asp-page="./Register" asp-route-returnUrl="@Model.ReturnUrl">Register as a new user</a>
</p>
*@
3b6akqbq

3b6akqbq2#

虽然这些信息可能有点过时,但它仍然很有价值。
通过执行以下步骤,可以限制对ASP.NET核心标识中用户注册的访问:
导航到“ProjectPath\Areas\Identity\Pages\Account\Register.cshtml”文件。
添加条件语句以将访问权限限制为仅限经过身份验证的用户。否则,显示验证消息。

@if (!User.Identity.IsAuthenticated)
{
    <p>Registration is restricted to logged in users.</p>
}
else
{
    //Registration form content here
}

接下来,在“ProjectPath\Pages\Shared_LoginPartial.cshtml”视图中,在经过身份验证的代码块中重新定位“Register”链接。此步骤将确保对未经身份验证的用户隐藏链接

@if (SignInManager.IsSignedIn(User))
{
    <li class="nav-item">
        <a  class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Manage/Index" title="Manage">Hello @User.Identity?.Name!</a>
    </li>
    <li class="nav-item">
        <a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Register">Register</a>
    </li>
    <li class="nav-item">
        <form class="form-inline" asp-area="Identity" asp-page="/Account/Logout" asp-route-returnUrl="@Url.Page("/", new { area = "" })" method="post" >
            <button  type="submit" class="nav-link btn btn-link text-dark">Logout</button>
        </form>
    </li>
}
else
{
    <li class="nav-item">
        <a class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Login">Login</a>
    </li>
}
neskvpey

neskvpey3#

您可以使用过滤器来阻止对注册页面的请求。此示例过滤器将请求重定向到根路径,但您可以重定向到通知用户已禁用注册的页面。这样,您只需添加一个属性,而无需更改任何注册代码。

  • BlockFilter.cs*
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using System;

namespace MySite.Filters
{
    public class BlockFilter : IAuthorizationFilter
    {

        public BlockFilter()
        {
        }
        public void OnAuthorization(AuthorizationFilterContext context)
        {
            if (context == null)
                throw new ArgumentNullException(nameof(context));

            context.Result = new RedirectResult("/"); //Redirect to you desired page

        }
    }

    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
    public class BlockAttribute : TypeFilterAttribute
    {
        public BlockAttribute() : base(typeof(BlockFilter))
        {
        }
    }
}
  • Startup.cs*
services.AddControllersWithViews(options =>
    {
        options.Filters.Add(new BlockAttribute());
    });

    services.AddRazorPages();
  • 注册.cshtml.cs*
[AllowAnonymous]
    [Block]
    public class RegisterModel : PageModel
    {
      ....

相关问题