Попытка получить свойство необъекта при сбросе пароля пользователя - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь сбросить пароль, но получаю сообщение об ошибке «Попытка получить свойство необъекта».Я также приложил снимок экрана с моей ошибкой, пожалуйста, посмотрите на него.

enter image description here

Мой контроллер для сброса пароля:

class ResetPasswordController extends Controller
{
protected $user;

public function __construct(User $user)
{
    $this->user = $user;
}
public function showResetForm(Request $request, $token = null)
{
    return view('auth.passwords.reset')->with(
        ['token' => $token, 'email' => $request->email]
    );
}

public function reset(Request $request)
{
    try {
        $password = $this->user->where('id', Auth::user()->id)->value('password');

        if(Hash::check($request->input('current_password'),$password)) {

            $this->user->where('id', Auth::user()->id)->update(['password' => bcrypt($request->input('new_password'))]);

            $token = $request->header('Authorization');

            JWT::invalidate($token);

            Auth::logout();

            return response(['status' => true, 'message' => 'Password changed successfully'], 200);

        } else {
            return response(['status' => false, 'message' => 'The Current Password is invalid.'], 200);
        }
    } catch (\Exception $ex) {
        return response(['status' => false, 'message' => $ex->getMessage()], 500);
    }
}

}

Конфигурация My Routes:

   \Illuminate\Support\Facades\Auth::routes();

   Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm');
   Route::post('password/reset', 'Auth\ResetPasswordController@reset')->name('password.request');

Шаблон My View:

        <form action="{{ route('password.request') }}" method="post">
<input type="hidden" name="_token" value="{{ csrf_token() }}">

<div class="form-group">
    <label for="login-form-email">Current Password</label>
    <input type="password" class="form-control" name="current_password" id="login-form-password" tabindex="2" placeholder="Current Password" tabindex="4">
</div>

<div class="form-group">
    <label for="login-form-password">New password</label>
    <input type="password" class="form-control" name="new_password" id="login-form-password" tabindex="2" placeholder="New Password" tabindex="4">
</div><!-- /.form-group -->

<div class="form-group">
    <label for="login-form-password-retype">Confirm new password</label>
    <input type="password" class="form-control" name="new_password_confirmation" id="login-form-password-retype" tabindex="3" placeholder="Confirm password">
</div><!-- /.form-group -->

<div class="form-group">
    <input type="submit"  class="btn btn-primary pull-right" name="reset-confirm" id="reset-confirm" tabindex="4" value="Reset Password">
</div>

У кого-нибудь есть решение на основе этого кода и сообщения об ошибке?Ваша помощь будет высоко оценена!

1 Ответ

0 голосов
/ 24 апреля 2019

Пользователь не должен быть участником

Ваша первая проблема здесь:

public function __construct(User $user)

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

public function __construct()
{
    $this->user = Auth::user();
}

Но поскольку у вас есть Auth::user(), он вам не нужен.

where на модели является статической

У вас есть

$this->user->where('id', Auth::user()->id)->value('password')

Функция where модели - это статическая функция, которую нельзя вызывать для отдельного объекта. Вместо этого вы должны вызвать его, используя оператор определения объема (::). На этом этапе большинство версий PHP должны выдавать ошибку. Правильный способ получить хэш пароля текущего пользователя из базы данных:

$hash = Auth::user()->password;

Если бы у вас был идентификатор, вы могли бы:

$hash = User::where('id','=',$userId)->get()->password;

Если вы сохранили пользователя в качестве участника (против рекомендации), но сделали это, как в предыдущем разделе этого ответа, вы можете:

$hash = $this->user->password

Почему?

Наконец, модуль Auth от Laravel в современных версиях уже позаботился об этом для вас в app\Http\Controllers\Auth. Зачем изобретать велосипед?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...