Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problema con sistema para recuperar contraseña (Laravel 5)

Estas en el tema de Problema con sistema para recuperar contraseña (Laravel 5) en el foro de PHP en Foros del Web. Buenas, tengo un problema, verán, estoy desarrollando una aplicación el Laravel 5 y ya tengo la mayoría, pero tengo un problema con el sistema de ...
  #1 (permalink)  
Antiguo 29/04/2015, 16:54
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Problema con sistema para recuperar contraseña (Laravel 5)

Buenas, tengo un problema, verán, estoy desarrollando una aplicación el Laravel 5 y ya tengo la mayoría, pero tengo un problema con el sistema de recuperar contraseña, tengo ya mi controlador, mi acción, vista y FormRequest hechos y funcionan o mas o menos, el problema es que parece que en la sección de recuperar contraseña el sistema no puede leer o tiene algún problema con el token, en la vista en la sección de errores me aparece el mensaje "passwords.token" cuando ingreso el email y la contraseña nueva, pero no logro entender que es lo que pasa, aquí el código que utilizo:
AuthController.php

Código PHP:
Ver original
  1. <?php
  2.  
  3. namespace App\Http\Controllers\Lual;
  4.  
  5. use App\Http\Controllers\Controller;
  6.  
  7. use Auth;
  8. use Illuminate\Contracts\Auth\Guard;
  9. use Illuminate\Contracts\Auth\PasswordBroker;
  10. use Illuminate\Foundation\Auth\ResetsPasswords;
  11. use App\Http\Requests\LoginFormRequest;
  12. use App\Http\Requests\EmailFormRequest;
  13. use App\Http\Requests\ResetFormRequest;
  14. use App\Models\Usuario;
  15.  
  16. class AuthController extends Controller
  17. {
  18.     use ResetsPasswords;
  19.  
  20.     public function __construct(Guard $auth, PasswordBroker $passwords)
  21.     {
  22.         $this->auth = $auth;
  23.         $this->passwords = $passwords;
  24.     }  
  25.  
  26.     public function getReset($subdoman='',$token=null) {
  27.         if (is_null($token)) {
  28.             throw new NotFoundHttpException;
  29.         }
  30.  
  31.         return view('lual.auth.reset')->with('token', $token);
  32.     }
  33.  
  34.     public function postReset(ResetFormRequest $request) {
  35.         $credentials = $request->only(
  36.             'email', 'password', 'password_confirmation', 'token'
  37.         );
  38.  
  39.         $response = $this->passwords->reset($credentials, function($user, $password)
  40.         {
  41.             $user->password = \Hash::make($password);
  42.  
  43.             $user->save();
  44.  
  45.             $this->auth->login($user);
  46.         });
  47.  
  48.         switch ($response)
  49.         {
  50.             case PasswordBroker::PASSWORD_RESET:
  51.                 return redirect('/');
  52.  
  53.             default:
  54.                 return redirect()->back()
  55.                             ->withInput($request->only('email'))
  56.                             ->withErrors(['email' => trans($response)]);
  57.         }
  58.     }
  59.  
  60.     public function getRegistro() {
  61.         return view('lual.auth.registro');
  62.     }
  63. }

ResetFormRequest.php
Código PHP:
Ver original
  1. <?php namespace App\Http\Requests;
  2.  
  3. use App\Http\Requests\Request;
  4.  
  5. class ResetFormRequest extends Request
  6. {
  7.     /**
  8.      * Determine if the user is authorized to make this request.
  9.      *
  10.      * @return bool
  11.      */
  12.     public function authorize()
  13.     {
  14.         return true;
  15.     }
  16.  
  17.     /**
  18.      * Get the validation rules that apply to the request.
  19.      *
  20.      * @return array
  21.      */
  22.     public function rules()
  23.     {
  24.         return [
  25.             //
  26.             'token' => 'required',
  27.             'email' => 'required|email',
  28.             'password' => 'required|confirmed'
  29.         ];
  30.     }
  31.  
  32.     public function messages() {
  33.         return [
  34.             'token'                 => 'authLogin.token',
  35.             'email.require'         => 'authLogin.emailRequire',
  36.             'email.email'           => 'authLogin.emailValid',
  37.             'password.require'      => 'authLogin.passRequire',
  38.             'password.confirmed'    => 'authLogin.confirmed'
  39.         ];
  40.     }
  41. }

reset.blade.php

Código PHP:
Ver original
  1. @extends('lual')
  2.  
  3. @section('titulo')
  4. {{ trans('authLogin.resetTitle') }}
  5. @endsection
  6.  
  7. @section('css')
  8. <link rel="stylesheet" href="/css/auth/login.css">
  9. @endsection
  10.  
  11. @section('contenido')
  12. <section class="container">
  13.     <article class="form-login">
  14.         <div class="form-content col-xs-11 col-sm-7 col-centered">
  15.             <p class="title">{{ trans('authLogin.resetTitle') }}</p>
  16.  
  17.             @if(count($errors) > 0)
  18.             <div class="form-error row col-xs-12 col-sm-12 col-md-8 col-md-offset-2">
  19.                 <div class="icon pull-left col-md-1">
  20.                     <span class="glyphicon glyphicon-warning-sign"></span>
  21.                 </div>
  22.                 @foreach ($errors->all() as $error)
  23.                 <div class="msn pull-right col-md-11">
  24.                     <p class="title">{{ trans('authLogin.errors') }}</p>
  25.                     <p>{{ $error }}</p>
  26.                 </div>
  27.                 @endforeach
  28.             </div>
  29.             @endif
  30.  
  31.             <form class="form-horizontal" action="/auth/reset" method="post">
  32.                 <div class="col-xs-12 col-sm-12 col-md-8 col-md-offset-2">
  33.                     <div class="form-group">
  34.                         <span for="email" class="sr-only">{{ trans('authLogin.email') }}</span>
  35.                         {!! Form::email('email',null,['class'=>'form-control','placeholder'=>trans('authLogin.email')]) !!}
  36.                     </div>
  37.  
  38.                     <div class="form-group">
  39.                         <span for="password" class="sr-only">{{ trans('authLogin.password') }}</span>
  40.                         {!! Form::password('password',['class'=>'form-control','placeholder'=>trans('authLogin.password')]) !!}
  41.                     </div>
  42.  
  43.                     <div class="form-group">
  44.                         <span for="password_confirmation" class="sr-only">{{ trans('authLogin..password-confirm') }}</span>
  45.                         {!! Form::password('password_confirmation',['class'=>'form-control','placeholder'=>trans('authLogin.password-confirm')]) !!}
  46.                     </div>
  47.  
  48.                     <div class="form-group">
  49.                         <span>{!! Form::submit(trans('authLogin.sendReset'),['class'=>'btn btn-primary']) !!}</span>
  50.                         {!! Form::hidden('token', $token) !!}
  51.                         {!! Form::token() !!}
  52.                     </div>
  53.                 </div>
  54.             </form>
  55.         </div>
  56.     </article>
  57. </section>
  58. @endsection

Usuario.php
Código PHP:
Ver original
  1. <?php namespace App\Models;
  2.  
  3. use Illuminate\Auth\Authenticatable;
  4. use Illuminate\Database\Eloquent\Model;
  5. use Illuminate\Auth\Passwords\CanResetPassword;
  6. use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
  7. use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
  8.  
  9. class Usuario extends Model implements AuthenticatableContract, CanResetPasswordContract
  10. {
  11.     use Authenticatable, CanResetPassword;
  12.  
  13.     /**
  14.      * The database table used by the model.
  15.      *
  16.      * @var string
  17.      */
  18.     protected $table = 'usuarios';
  19.  
  20.     /**
  21.      * The attributes that are mass assignable.
  22.      *
  23.      * @var array
  24.      */
  25.     protected $fillable = ['nombre','email', 'password'];
  26.  
  27.     /**
  28.      * The attributes excluded from the model's JSON form.
  29.      *
  30.      * @var array
  31.      */
  32.     protected $hidden = ['password', 'remember_token'];
  33. }

al final en postReset() si pasa el token, pero el sistema no lo detecta o no lo puede leer, el punto es que me regresa a getReset() mandando el error "passwords.token", oajalá puedan ayudarme
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #2 (permalink)  
Antiguo 29/04/2015, 17:25
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 10 meses
Puntos: 379
Respuesta: Problema con sistema para recuperar contraseña (Laravel 5)

Puedes publicar el error textualmente
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 29/04/2015, 18:21
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Problema con sistema para recuperar contraseña (Laravel 5)

No es error a nivel programación, si no que la misma aplicación no valida y ejecuta el switch default:

Código PHP:
Ver original
  1. redirect()->back()->withErrors(['email' => $response]);

Y literalmente el error es 'passwords.token', el objeto errors contiene:

Código PHP:
Ver original
  1. object(Illuminate\Support\ViewErrorBag)#152 (1) {
  2.  ["bags":protected]=>
  3.   array(1) {
  4.     ["default"]=>
  5.     object(Illuminate\Support\MessageBag)#153 (2) {
  6.      ["messages":protected]=>
  7.       array(1) {
  8.         ["email"]=>
  9.         array(1) {
  10.           [0]=>
  11.           string(15) "passwords.token"
  12.         }
  13.       }
  14.       ["format":protected]=>
  15.       string(8) ":message"
  16.     }
  17.   }
  18. }

No se que otra información necesites?

Actualización

Verificando las clases propias del framework me doy cuenta que dicho error indica que el token es invalido, sabiendo que significa "passwords.token" verifico como guarda el token en la DB y el token enviado por correo y me doy cuenta que estos no coinciden, el token enviado por email tiene un "s" de mas al final por lo cual el token jamás coincidirá, al final modifico la vista del correo electronico y ya funciona correctamente el sistema, agradezco la atención @hhs, trabajar cansado no ayuda mucho ajaja
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Última edición por Nemutagk; 29/04/2015 a las 18:48

Etiquetas: contraseña, laravel, registro, sistema, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:15.