Laravel problem ze zmianą hasła usera

0

Mam taki problem mam problem ze zmianą hasła użytkownika próbuje to zrobić ajaxem tylko nie wiem czy tak się czy trzeba to zrobić postem czy getem Tak wygląda funkcja do zmiany hasła

    public function setPassword() {
        $User = new Users;
        //$user_id = Auth::User()->id;       
        //$User->password = Hash::make(Input::get("password_old"));
        //$User->where("id",Auth::User()->id)
          //      ->update(['password' => Hash::make(Input::get("password_old"))]);
        //$userinput["password"] = Hash::make(Input::get("password_old"));

        //$this->validate($request, $User::validationRules());

        //$User::find(Auth::User()->id)->update($userinput);
        Password::sendResetLink(['id' => Auth::User()->id]);
        //$User->save();
        //$objUser = $User::find($user_id);

        //$objUser->password = Hash::make(Input::get("password_old"));
        //$objUser->update(); 
        print "dos";

    }

Próbowałem też ręcznie przez zachbadzowanie hasła i update tabeli zmienia mi hasło w polu password, ale ja się wyloguje to nie mogę się zalogować na nowe hasło loguje tylko na stare
A teraz próbuje to zrobić według poradnika Password::sendResetLink(['id' => Auth::User()->id]); i jest komunikat, że nie ma takiego rutingu jak
Route [password.reset] not defined.
A w rotutingu mam

Route::get("User/changePassword","[email protected]");
Route::get('/User/changePassword/{token}', 'Auth\[email protected]');
Route::post('/User/changePassword/', 'Auth\[email protected]');
Route::get('/password/reset/email', 'Auth\[email protected]');
Route::post('/password/reset/email', 'Auth\[email protected]');
0

próbuje to zrobić ajaxem tylko nie wiem czy tak się czy trzeba to zrobić postem czy getem

Jeżeli sam sobie definiujesz ścieżki to nie ma znaczenia, czy zrobisz to na get, czy post, bo przejdzie, ale normalnie GET powinien zwracać jedynie dane i nie generować żadnych zmian.
Tutaj jak najbardziej powinien być POST, poza tym:

        $this->post('password/reset', 'Auth\[email protected]');

w samym laravelu ta ścieżka domyślna jest zrobiona pod POST.

Próbowałem też ręcznie przez zachbadzowanie hasła i update tabeli zmienia mi hasło w polu password, ale ja się wyloguje to nie mogę się zalogować na nowe hasło loguje tylko na stare

Może jakiś błąd był i tabela jednak nie zmieniała hasha, albo nie generowałeś hasła?
Jeżeli wygenerujesz sobie string, zahashujesz i wsadzisz do bazy, to normalnie nowe hasło powinno działać.

i jest komunikat, że nie ma takiego rutingu jak Route [password.reset] not defined.

Aby korzystać z domyślnych ścieżek do resetowania hasła, musisz użyć w web.php Auth::routes(); (które jest automatycznie dodane po użyciu php artisan make:auth na nowym projekcie laravela), albo ręcznie zdefiniować samo resetowanie hasła:

        // Password Reset Routes...
        $this->get('password/reset', 'Auth\[email protected]')->name('password.request');
        $this->post('password/email', 'Auth\[email protected]')->name('password.email');
        $this->get('password/reset/{token}', 'Auth\[email protected]')->name('password.reset');
        $this->post('password/reset', 'Auth\[email protected]');
0

Tutaj trzeba by było zacząć od tego w jaki sposób autor chce zmienić to hasło. Jeżeli hasło ma być zmienione przez użytkownika z poziomu (przykładowo) panelu użytkownika to sprawa prosta. Pisane z pamięci:

public function changePassword(Request $request)
    {
        $user = $request->user();

        /* jakies sprawdzenie czy hasło ma odpowiednią długość itp. */

        $user->password = Hash::make($request->input('password'));;
        $user->save();

    }

Oczywiście działamy na modelu User z kolumną password w bazie danych.

0
leonpro778 napisał(a):

Tutaj trzeba by było zacząć od tego w jaki sposób autor chce zmienić to hasło. Jeżeli hasło ma być zmienione przez użytkownika z poziomu (przykładowo) panelu użytkownika to sprawa prosta. Pisane z pamięci:

public function changePassword(Request $request)
    {
        $user = $request->user();

      /* jakies sprawdzenie czy hasło ma odpowiednią długość itp. */

        $user->password = Hash::make($request->input('password'));;
        $user->save();

    }

Tak też próbowałem

$User->where("id",Auth::User()->id)
                ->update(['password' => Hash::make(Input::get("password_old"))],["remember_token" => ""]);

Nawet z remember_token i nadal działa tylko stare hasło i w ogóle tego remember_token nie czyści.

0

po pierwsze zmiana hasła to jest zmiana więc ani getem ani postem tylko putem

0
pol90 napisał(a):

Nawet z remember_token i nadal działa tylko stare hasło i w ogóle tego remember_token nie czyści.

Wywala Ci jakieś błędy, cokolwiek?

0

Jak ręcznie to robisz to jak ma czyścić remember_token? Automagicznie to się nie dzieje.

odpowiedz sobie na jedno zasadnicze pytanie "co chce napisać?" bo na razie to błądzisz. Masz 2 odpowiedzi do wyboru:

  • przypomnienie hasła
  • zmiana hasła będąc zalogowanym.
0

pol90 - Zmiana hasła będąc zalogowanym.

To po co ci remember token, używany podczas resetu hasła gdy ktoś zapomniał hasła?

1
$User->where("id",Auth::User()->id)
                ->update(['password' => Hash::make(Input::get("password_old"))],["remember_token" => ""]);

jak ustawiając hash z starego hasła

Hash::make(Input::get("password_old"))

zamierzasz uzyskać nowe hasło? Nie dziwne, że hasło się nie zmienia. Hash się zmienia, natomiast hashujesz dokładnie te samo hasło co miałeś wcześniej...

0
mefsh napisał(a):
$User->where("id",Auth::User()->id)
                ->update(['password' => Hash::make(Input::get("password_old"))],["remember_token" => ""]);

jak ustawiając hash z starego hasła

Hash::make(Input::get("password_old"))

zamierzasz uzyskać nowe hasło? Nie dziwne, że hasło się nie zmienia. Hash się zmienia, natomiast hashujesz dokładnie te samo hasło co miałeś wcześniej...

Dzięki teraz wszystko działa dobrze, ta moja spostrzegawczość.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0