NullReferenceException при использовании VerifyHashedPassword в ядре asp.net - PullRequest
0 голосов
/ 20 февраля 2019

Вот что происходит, когда я работаю на контроллере входа, где мне нужно проверить пароль ввода пользователя с помощью хэша пароля, который находится в базе данных.Когда я пытаюсь проверить правильный пароль, он возвращает NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта.Но когда я отлаживаю его, строка с этим кодом:

var verified = hasher.VerifyHashedPassword(inputModel, resultData.passwordhash, password);

пропускается и не выполняется, но когда я возвращаю значение verify.toString () непосредственно после вызова вышеуказанной строки кода,это печать строки «Успех».Но когда это не удалось проверить, код просто работает правильно.Вот полный код:

public dbSearchResponse dbSearch(string username, string password, ADResponse ldapResult)
        {
            LoginResponse finalResult = new LoginResponse();
            TableSystemUser resultData = new TableSystemUser();

            PasswordHasher<OldLoginParamModel> hasher = new PasswordHasher<OldLoginParamModel>(
                new OptionsWrapper<PasswordHasherOptions>(
                new PasswordHasherOptions()
                {
                    CompatibilityMode = PasswordHasherCompatibilityMode.IdentityV2
                }));

            OldLoginParamModel inputModel = new OldLoginParamModel();
            inputModel.grant_type = "password";
            inputModel.password = password;
            inputModel.username = username;

            string hashedPassword = hasher.HashPassword(inputModel, inputModel.password);

            using (var connection = new NpgsqlConnection(configuration.GetValue<string>("dbServer:connectionData")))
            {
                connection.Open();
                try
                {
                    var value = connection.Query<TableSystemUser>(
                        "SELECT id, email, emailconfirmed, passwordhash, phonenumber, username, fullname, dateofbirth, gender, COALESCE(usercredit.saldo, 0) as saldo, pricing.psc, pricing.psm, pricing.plc, pricing.plm, pricing.csc, pricing.csm, pricing.clc, pricing.clm, pricing.ssc, pricing.ssm, pricing.slc, pricing.slm FROM systemuser LEFT OUTER JOIN usercredit ON systemuser.id = usercredit.systemuserid INNER JOIN userpricing ON UUID(systemuser.id) = userpricing.systemuserid INNER JOIN pricing ON userpricing.pricingid = pricing.pricingid WHERE systemuser.email= '" + username + "' and systemuser.emailconfirmed = true;"
                        );
                    resultData = value.First();
                }
                catch (Exception e)
                {
                    //Failed response
                    dbSearchResponse dbRespNRErr = new dbSearchResponse();
                    dbRespNRErr.loginResponse = null;
                    dbRespNRErr.userid = null;
                    dbRespNRErr.response = "Email not registered.";
                    return dbRespNRErr;
                }
            }

            var verified = hasher.VerifyHashedPassword(inputModel, resultData.passwordhash, password);

           /*But when return the verified.toString() value here, it is returning "Success"
            dbSearchResponse dbRespErr = new dbSearchResponse();
            dbRespErr.loginResponse = null;
            dbRespErr.userid = null;
            dbRespErr.response = verified.toString();
            return dbRespErr; */

            if (verified.toString() == "Success")
            {
                finalResult.FullName = resultData.fullname;
                finalResult.Gender = resultData.gender;
                //11/26/1998 12:00:00 AM
                finalResult.DateOfBirth = resultData.dateofbirth.ToString("MM/dd/yyyy HH:mm:ss tt");
                finalResult.Phone = resultData.phonenumber;
                finalResult.Email = resultData.email;
                finalResult.UserName = resultData.username;
                finalResult.PLC = resultData.plc.ToString();
                finalResult.PLM = resultData.plm.ToString();
                finalResult.PSC = resultData.psc.ToString();
                finalResult.PSM = resultData.psm.ToString();
                finalResult.SLC = resultData.slc.ToString();
                finalResult.SLM = resultData.slm.ToString();
                finalResult.SSC = resultData.ssc.ToString();
                finalResult.SSM = resultData.ssm.ToString();
                finalResult.CLC = resultData.clc.ToString();
                finalResult.CLM = resultData.clm.ToString();
                finalResult.CSC = resultData.csc.ToString();
                finalResult.CSM = resultData.csm.ToString();
                finalResult.PayLater = ldapResult.memberof;
                finalResult.Credit = resultData.saldo.ToString();

                dbSearchResponse dbResp = new dbSearchResponse();
                dbResp.loginResponse = finalResult;
                dbResp.userid = resultData.id;
                dbResp.response = "success";

                return dbResp;
            }
            //Failed response
            dbSearchResponse dbRespErr = new dbSearchResponse();
            dbRespErr.loginResponse = null;
            dbRespErr.userid = null;
            dbRespErr.response = "The user name or password is incorrect.";
            return dbRespErr;
        }

Кто-нибудь знает, что происходит и как это решить?Спасибо

1 Ответ

0 голосов
/ 22 февраля 2019

После того, как я выполню некоторую детальную проверку выполнения, я замечаю, что нулевая часть кода равна

finalResult.PayLater = ldapResult.memberof;

Но я не понимаю, почему приведенный ответ об ошибке указывает на то, что нулевой была эта строкакода

var verified = hasher.VerifyHashedPassword(inputModel, resultData.passwordhash, password);

, поэтому в этом случае я благодарю всех, кто ответил на мой вопрос.

...