Laravel Пустое хеширование пароля - PullRequest
0 голосов
/ 05 марта 2020

Когда я пытаюсь обновить данные пользователя и оставить поле пароля пустым, оно снова хэшируется, что означает, что пароль изменится, и вы не сможете войти снова, поэтому есть ли способ решить эту проблему ??

Код

$this->validate($request, [
        'first_name'=> 'required|string',
        'last_name' =>  'required|string',
        'email'     =>  'required|email|unique:users,email,'.Auth::id(),
        'password'  =>  'sometimes|nullable|string|min:8,'.Auth::id(),
        'avatar'    =>  'image|mimes:jpg,jpeg,gif,png,svg|max:2048,'.Auth::id(),
        'gender'    =>  'required',
        'country_id'=>  'required',
    ]);

    $user = User::find(Auth::id());

    $user->first_name = $request->first_name;
    $user->last_name = $request->last_name;
    $user->email = $request->email;
    $user->gender = $request->gender;
    $user->country_id = $request->country_id;
    $user->password = bcrypt(request('password'));
    if($request->hasFile('avatar')){
        $avatar = $request->file('avatar');
        $filename = time() . '.' . $avatar->getClientOriginalExtension();
        Image::make($avatar)->resize(300, 300)->save( public_path('/images/avatars/' . $filename ) );
        $user->avatar = $filename;
    }

    $user->save();

    return redirect()->back();

Ответы [ 3 ]

2 голосов
/ 05 марта 2020

Сначала необходимо проверить, есть ли в объекте запроса passoword.

if($request->password){
 $user->password = bcrypt(request('password'));
}

После редактирования это будет выглядеть так:

$this->validate($request, [
    'first_name'=> 'required|string',
    'last_name' =>  'required|string',
    'email'     =>  'required|email|unique:users,email,'.Auth::id(),
    'password'  =>  'sometimes|nullable|string|min:8,'.Auth::id(),
    'avatar'    =>  'image|mimes:jpg,jpeg,gif,png,svg|max:2048,'.Auth::id(),
    'gender'    =>  'required',
    'country_id'=>  'required',
]);

$user = User::find(Auth::id());

$user->first_name = $request->first_name;
$user->last_name = $request->last_name;
$user->email = $request->email;
$user->gender = $request->gender;
$user->country_id = $request->country_id;

if($request->password){
    $user->password = bcrypt(request('password'));
}

if($request->hasFile('avatar')){
    $avatar = $request->file('avatar');
    $filename = time() . '.' . $avatar->getClientOriginalExtension();
    Image::make($avatar)->resize(300, 300)->save( public_path('/images/avatars/' . $filename ) );
    $user->avatar = $filename;
}

$user->save();

return redirect()->back();
1 голос
/ 05 марта 2020

Сначала вы можете изменить правило проверки, чтобы проверить, не является ли password пустым, если оно присутствует:

'password'  =>  'sometimes|required|string|min:8',

Затем bcrypt, если оно не пустое и присутствует в запросе v ie $request->filled() метод:

if ($request->filled('password'))
{
    $user->password = bcrypt($request->password);
}
1 голос
/ 05 марта 2020

Вы можете просто проверить пароль, если он присутствует.

$this->validate($request, [
        'first_name'=> 'required|string',
        'last_name' =>  'required|string',
        'email'     =>  'required|email|unique:users,email,'.Auth::id(),
        'password'  =>  'sometimes|nullable|string|min:8,'.Auth::id(),
        'avatar'    =>  'image|mimes:jpg,jpeg,gif,png,svg|max:2048,'.Auth::id(),
        'gender'    =>  'required',
        'country_id'=>  'required',
    ]);

    $user = User::find(Auth::id());

    $user->first_name = $request->first_name;
    $user->last_name = $request->last_name;
    $user->email = $request->email;
    $user->gender = $request->gender;
    $user->country_id = $request->country_id;
    if ($request->password) {
        $user->password = bcrypt($request->password);
    }
    if($request->hasFile('avatar')){
        $avatar = $request->file('avatar');
        $filename = time() . '.' . $avatar->getClientOriginalExtension();
        Image::make($avatar)->resize(300, 300)->save( public_path('/images/avatars/' . $filename ) );
        $user->avatar = $filename;
    }

    $user->save();

    return redirect()->back();
...