加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-core – 重定向登录到Controller Action

发布时间:2020-12-16 07:06:42 所属栏目:asp.Net 来源:网络整理
导读:从使用个人用户帐户的ASP.NET 5 Web应用程序模板开始,我已设法使用Microsoft帐户进行外部身份验证.当用户单击Login时,他们将被重定向到AccountController中的ExternalLogin,就像这样 form asp-controller="Account" asp-action="ExternalLogin" method="post
从使用个人用户帐户的ASP.NET 5 Web应用程序模板开始,我已设法使用Microsoft帐户进行外部身份验证.当用户单击Login时,他们将被重定向到AccountController中的ExternalLogin,就像这样

<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帐户登录,所有似乎都运行良好.但是如何拦截直接尝试访问特权操作[授权]
?以便用户重定向到ExternalLogin?可以在Startup.cs中设置默认操作吗?

编辑1尝试遵循@Yves的建议我在Filters文件夹中创建了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

显然有很多我不明白.

编辑2:这是ExternalLogin的签名

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

这就是ActiveLogin在ASP.Net 5 Web App Template中开箱即用的方式.

解决方法

您可以注册IAuthorizationFilter或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",null);
        }
    }
}

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

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

或者,如果您想使用自己的属性,可以使用ActionFilter的OnActionExecuting方法检查是否一切都按照您的意愿发生……

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读