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

时间:2018-03-09 17:50:15

标签: c# asp.net webforms asp.net-identity-2

我在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;
    }

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

2 个答案:

答案 0 :(得分:1)

有几种选择。

您可以使用returnUrl的查询参数,您可以在登录时使用该参数进行重定向。如果您确实使用了查询参数,请确保在重定向之前将returnUrl实际设置为您网站上的网址;否则黑客可能会使用您的页面让用户访问恶意网站。

另一个选择是使用会话(如果可用)来存储有关用户尝试访问的内容以及从会话变量重定向的信息。

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());
    }
}

答案 1 :(得分:0)

您可以将重定向网址作为参数添加到登录重定向中,并在登录后将其重定向回来。

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);
    }
}

然后,您可以在登录页面上阅读此网址:

string returnurl = Response.QueryString("returnurl")

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

相关问题