繁体   English   中英

重定向到登录后重定向回位置

[英]Redirect back to location after being redirected to login

我在ASP.NET 4.6 Web窗体应用程序中。

我正在尝试使用声明来检查用户是否被授权像这样的工资页面:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!ContainsClaim(User.Identity.Name, "role", "admin"))
        {
            //execute function 1
            Response.Redirect("Account/Login.aspx");
        }
    }

    public bool ContainsClaim(string userName, string claimType, string claimValue)
    {
        ApplicationDbContext context = new ApplicationDbContext();
        var user = context.Users.Where(s => s.UserName == "rsadmin").FirstOrDefault();

        if (user == null)
        {
            return false;
        }
        return user.Claims.Where(s => s.ClaimType == claimType && s.ClaimValue == claimValue).Count() > 0;
    }

薪资用户在登录前单击了薪资页面。因此,她被重定向到登录页面。 登录后如何自动将其引导回薪资页面?

有几种选择。

您可以为returnUrl使用查询参数,该参数可以在登录时重定向。 如果确实使用查询参数,请在重定向之前确保将returnUrl实际上设置为站点上的url; 否则,您的网页可能会被黑客用来诱使用户访问一个邪恶的网站。

另一种选择是使用会话(如果可用)来存储有关用户试图访问会话变量并从会话变量重定向的信息。

protected void Page_Load(object sender, EventArgs e)
{
    if (!ContainsClaim(User.Identity.Name, "role", "admin"))
    {
        //execute function 1
        Response.Redirect("Account/Login.aspx?ReturnUrl="+HttpUtility.UrlEncode(Request.Url.PathAndQuery));
    }
}

要检查页面是否在同一服务器上:

var redirUrl = HttpUtility.UrlDecode(Request["ReturnUrl"]);
if(!string.IsNullOrWhiteSpace(redirUrl)){
    var mappedPath = Page.MapPath(redirUrl.Trim());
    if(File.Exists(mappedPath)){
        Response.Redirect(redirUrl.Trim());
    }
}

您可以将重定向url作为参数添加到登录重定向中,并将其拉入登录后重定向回。

protected void Page_Load(object sender, EventArgs e)
{
    if (!ContainsClaim(User.Identity.Name, "role", "admin"))
    {
        //get current url
        string url = HttpContext.Current.Request.Url.AbsoluteUri;
        //execute function 1
        Response.Redirect("Account/Login.aspx?returnurl=" + url);
    }
}

然后,您可以使用以下命令在登录页面上阅读此URL:

string returnurl = Response.QueryString("returnurl")

如果参数不为空,则在登录方法中重定向至该参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM