asp.net razor仅允许登录用户编辑页面

asp.net razor仅允许登录用户编辑页面,asp.net,razor,Asp.net,Razor,我有这个配置文件编辑页面,但如果用户更改了url中的id,他可以更改其他用户的配置文件,我如何拒绝访问url中的其他id if (!IsPost) { //if(!Request.QueryString["ID"].IsEmpty()){ if (!Request.QueryString["UserId"].IsEmpty() && Request.QueryString["UserId"].IsInt()) {

我有这个配置文件编辑页面,但如果用户更改了url中的id,他可以更改其他用户的配置文件,我如何拒绝访问url中的其他id

 if (!IsPost)
    {
        //if(!Request.QueryString["ID"].IsEmpty()){
        if (!Request.QueryString["UserId"].IsEmpty() && Request.QueryString["UserId"].IsInt())

        {
            UserId = Request.QueryString["UserId"];
            var db = Database.Open("mystring");
            var dbCommand = "SELECT * FROM UserProfile WHERE UserId = @0";
            var row = db.QuerySingle(dbCommand, UserId);

            if (row != null)
            {
                Email = row.Email;
                fullname = row.fullname;
                location = row.location;

            }
            else
            {

                ModelState.AddFormError("No Profile was selected.");


            }

通过不允许将userid作为查询字符串参数传递,而是从加密表单身份验证cookie中读取它

因此:

应成为:

string username = User.Identity.Name;

这将为您提供当前经过身份验证的用户名,然后只更改他的个人资料。

有很多方法可以做到这一点

  • 不要将用户Id作为查询字符串传递。在模型对象中传递它

  • 如果您决定从查询字符串传递用户id,并且已设置身份验证,则可以将在查询字符串中传递的用户id与登录用户的用户id相匹配。如果这两个匹配,则仅允许编辑


  • 您使用的是哪种身份验证?请尝试Darin Dimitrov提出的解决方案,您不应该在不进行任何检查的情况下从查询字符串中获取用户id
    string username = User.Identity.Name;