将登录重定向到控制器操作

2024-06-20

从使用个人用户帐户的 ASP.NET 5 Web 应用程序模板开始,我成功地使用 Microsoft 帐户进行外部身份验证。当用户单击“登录”时,他们将被重定向到ExternalLogin in AccountController像这样

<form asp-controller="Account" asp-action="ExternalLogin" method="post" asp-route-returnurl="@ViewData["ReturnUrl"]" class="nav navbar-right">
    <button type="submit" class="btn btn-null nav navbar-nav navbar-right" name="provider" value="Microsoft" title="Log in"><span class="fa fa-sign-in"/>&nbsp; Log In</button>
</form>

这让他们使用他们的 Microsoft 帐户登录,一切似乎都运行良好。但是我如何拦截访问特权操作的直接尝试[Authorize] 以便用户被重定向到ExternalLogin?可以设置默认操作吗Startup.cs?

EDIT 1尝试遵循我创建的@Yves 的建议CustomAutorizationFilter在过滤器文件夹中。它不检查任何条件

public class CustomAutorizationFilter : IAuthorizationFilter
{
    public void OnAuthorization(Microsoft.AspNet.Mvc.Filters.AuthorizationContext context)
    {
        //if (...) // Check you conditions here
        //{
            context.Result = new RedirectToActionResult("ExternalLogin", "Account", null);
        //}
    }
}

并已编辑ConfigureServices如下

        services.AddMvc(config =>
        {
            config.Filters.Add(typeof(Filters.CustomAutorizationFilter));
        });

当我在本地运行该应用程序时,它不再转到主页。它返回一个空白http://localhost:52711/Account/ExternalLogin

显然有很多我不明白的地方。

Edit 2:这是签名ExternalLogin

 // POST: /Account/ExternalLogin
    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public IActionResult ExternalLogin(string provider, string returnUrl = null)

就是这样ExternalLogin在 ASP.Net 5 Web 应用程序模板中开箱即用。


您可以注册一个IAuthorizationFilter or an IActionFilter实现这一点。在这些过滤器中,您可以检查请求是否正在尝试访问特权操作,用户是否已登录或具有足够的权限来执行此操作。

如果您正在使用AutorizeAttribute,我建议你使用AutorizationFilter。 如果您使用自己的自定义属性,请使用ActionFilter.

这是一个例子:

MVC 调用IAuthorizationFilter.OnAuthorization每个动作执行之前的方法。

public class CustomAuthorizationFilter : IAuthorizationFilter
{
    public void OnAuthorization(Microsoft.AspNet.Mvc.Filters.AuthorizationContext context)
    {
        if (...) // Check you conditions here
        {
            context.Result = new RedirectToActionResult("ExternalLogin", "Account", null);
        }
    }
}

要注册此过滤器,请在 Startup.cs 中编辑ConfigureServices method:

services.AddMvc(config =>
{
    config.Filters.Add(typeof(CustomAuthorizationFilter ));
});

或者如果你想使用你自己的属性,你可以使用ActionFilter's OnActionExecuting检查一切是否如您所愿发生的方法...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将登录重定向到控制器操作 的相关文章

随机推荐