如何解决如何使用Identity Core 3.1禁用新用户注册?
我有一个ASP.NET Core 3.1。我需要临时阻止新用户注册。
我该怎么做?
注册服务时,我尝试查看选项,但没有允许我禁用注册的选项。
services.AddIdentity(options =>
{
});
解决方法
您可以使用过滤器阻止对注册页面的请求。此示例过滤器将请求重定向到根路径,但是您可以重定向到一个页面,通知用户有关已禁用注册的信息。这样,您只需添加属性,而无需更改任何注册码。
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();
Register.cshtml.cs
[AllowAnonymous]
[Block]
public class RegisterModel : PageModel
{
....
,
似乎没有禁用注册的选项。但是您可以手动进行一些更改。
您可以首先搭建两个身份页面: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>
*@
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。