entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Hola,

He utilizado la autenticación y recuperación de contraseña proporcionado por laravel 5.3, haciendo uso del comando php artisan make:auth, en mi base de datos mi tabla usuario posee el campo usua_correo y usua_contrasena para iniciar sesión, al momento de hacer uso de la funcionalidad de recuperar contraseña me arroja lo siguiente:

QueryException in Connection.php line 770: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'email' in 'where clause' (SQL: select * from Usuario where email = [email protected] limit 1)

No he encontrado la manera de que en vez de usar el campo email en el where de la consulta, use el campo usua_correo.

He intentado con las siguientes funciones en User.php (modelo)

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * El nombre de la tabla asociada al modelo.
     *
     * @var string
     */
    protected $table = 'Usuario';

    /**
     * El nombre de la llave primaria de la tabla.
     * Se modifica debido a que no es el nombre por defecto: id.
     *
     * @var string
     */
    protected $primaryKey = 'usua_id';

    /**
     * El nombre del campo equivalente a CREATE_AT en la base de datos.
     * Se modifica debido a que no es el nombre por defecto: create_at.
     *
     * @var string
     */
    const CREATED_AT = 'usua_fechacreacion';

    /**
     * El nombre del campo equivalente a UPDATED_AT en la base de datos.
     * Se modifica debido a que no es el nombre por defecto: update_at.
     *
     * @var string
     */
    const UPDATED_AT = 'usua_fechamodificacion';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'usua_nombre', 'usua_correo', 'usua_contrasena','usua_rol'
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'usua_contrasena', 'remember_token',
    ];

    // 1
    protected $email = "usua_correo";

    //2
    public function getAuthPassword()
    {
        return $this->usua_contrasena;
    }
    // 3
    public function getEmailForPasswordReset() {
        return $this->usua_correo;
    }
    // 4
    public function getUserNameForPasswordReset(){
        return $this->usua_correo;
    }
}

1voto

admont28 comentado

He encontrado lo siguiente, al menos para eliminar el error de la consulta SQL que se construye.

en la Vista:

<div class="form-group{{ $errors->has('usua_correo') ? ' has-error' : '' }}">
    <label for="email" class="col-md-4 control-label" >{{ trans('messages.correo') }}</label>

    <div class="col-md-6">
        <input id="usua_correo" type="email" class="form-control" name="usua_correo" value="{{ old('usua_correo') }}" required>

        @if ($errors->has('usua_correo'))
            <span class="help-block">
                <strong>{{ $errors->first('usua_correo') }}</strong>
            </span>
        @endif
    </div>
</div>

Sobrescribiendo el método sendResetLinkEmail del controlador ForgotPasswordController que se encuentra en la ruta: app\Http\Controllers\Auth\ForgotPasswordController

/**
 * Send a reset link to the given user.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\RedirectResponse
 */
public function sendResetLinkEmail(Request $request)
{
    $this->validate($request, ['usua_correo' => 'required|email']);

    // We will send the password reset link to this user. Once we have attempted
    // to send the link, we will examine the response then see the message we
    // need to show to the user. Finally, we'll send out a proper response.
    $response = $this->broker()->sendResetLink(
        $request->only('usua_correo')
    );

    return $response == Password::RESET_LINK_SENT
                ? $this->sendResetLinkResponse($response)
                : $this->sendResetLinkFailedResponse($request, $response);
}

Pero después de esto me sale otro error:

Column not found: 1054 Unknown column 'email' in 'where clause' (SQL: delete from RestablecerContrasena` where email is null)

No encuentro la manera de cambiar el campo email por usua_correo.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta