如何使用 Identity Core 3.1 禁用新用户注册?

问题描述 投票:0回答:3

我有 ASP.NET Core 3.1。我需要暂时阻止新用户注册。

我该怎么做?

我尝试查看注册服务时的选项,但没有看到允许我禁用注册的选项。

services.AddIdentity(options => 
{

});
asp.net asp.net-core asp.net-core-mvc asp.net-core-3.1 asp.net-core-identity
3个回答
1
投票

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

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
    {
      ....

0
投票

似乎没有这样的选项来禁用注册。但您可以手动进行一些更改。

您可以先搭建两个身份页面:

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>
*@

0
投票

虽然这些信息可能有点过时,但仍然很有价值。

可以通过以下步骤来限制对 ASP.NET Core Identity 中用户注册的访问:

导航到“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”视图中,重新定位经过身份验证的代码块中的“注册”链接。此步骤将确保该链接对未经身份验证的用户隐藏

@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>
}
© www.soinside.com 2019 - 2024. All rights reserved.