Laravel аутентификация из другой таблицы не работает - PullRequest
0 голосов
/ 20 апреля 2020

В моем проекте laravel я хочу реализовать функцию входа для агентов. Я пытаюсь заставить агентов войти в систему из таблицы 'agents'. Я создал контроллер и также добавил в config/auth.php, но он не работает.

Ниже приведен мой код в модели

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Notifiable;
use Kyslik\ColumnSortable\Sortable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class Agencie extends Authenticatable
{
    use Notifiable;
    use Sortable;

    protected $table = 'agencies';
    protected $primaryKey = 'agency_id';    

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'agency_id', 'agency_name','agency_user_name' ,'agency_password', 'agency_city', 'agency_state', 'agency_zip', 'agency_email','status','created_at','updated_at'
    ];

}

Следующие строки я добавил в config / auth. php под providers & guards

'guards' => [
         'agency' => [
            'driver' => 'session',
            'provider' => 'agency',
        ],
    ],
'providers' => [
        'agency' => [
            'driver' => 'eloquent',
            'model' => App\Agencie::class,
        ],
    ],

Ниже приведены коды в маршрутах. php

  Route::group(['prefix' => 'agency'], function () {
        Route::get('/', 'Agency\AgencyAuth\LoginController@showLoginForm')->name('agency_login');
        Route::get('/login', 'Agency\AgencyAuth\LoginController@showLoginForm')->name('login');
        Route::post('/login', 'Agency\AgencyAuth\LoginController@login');
    });

Ниже приведен код в контроллере

<?php

namespace App\Http\Controllers\Agency\AgencyAuth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Facades\Auth;
use Hesto\MultiAuth\Traits\LogsoutGuard;
use JsValidator;

class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers, LogsoutGuard {
        LogsoutGuard::logout insteadof AuthenticatesUsers;
    }


    protected $validationRules = [
                                        'email' => 'required|email',
                                        'password' => 'required'
                                    ];

    /**
     * Where to redirect users after login / registration.
     *
     * @var string
     */
    // public $redirectTo = '/user/home';
    public $redirectTo = '/user/dashboard-graph';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('admin.guest', ['except' => 'logout']);
    }

    /**
     * Show the application's login form.
     *
     * @return \Illuminate\Http\Response
     */
    public function showLoginForm()
    {
        $validator = JsValidator::make($this->validationRules,[],[],'#loginform');
        return view('agency.auth.login')->with('validator', $validator);
    }

    /**
     * Get the guard to be used during authentication.
     *
     * @return \Illuminate\Contracts\Auth\StatefulGuard
     */
    protected function guard()
    {
        return Auth::guard('agency');
    }
    /**
     * Get the needed authorization credentials from the request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    protected function credentials(\Illuminate\Http\Request $request)
    {
        //return $request->only($this->username(), 'password');
        return ['email' => $request->{$this->username()}, 'password' => $request->password, 'status' => 'Active'];
    }
}

У меня есть Не добавлены коды страницы просмотра, форма входа успешно загружается, но если я предоставляю "идентификатор электронной почты" и "пароль" из agency_table, он не регистрируется.

Отображается следующая ошибка

 Column not found: 1054 Unknown column 'email' in 'where clause

Моя таблица называется admin_email Пожалуйста, помогите, в чем здесь проблема

1 Ответ

0 голосов
/ 20 апреля 2020

Вы уверены, что у вас есть поле электронной почты в таблице? Leravel по умолчанию использует электронную почту в качестве имени пользователя в качестве данных для аутентификации.

Поскольку в вашей таблице есть столбец "agency_email", поэтому вам, возможно, придется изменить свой контроллер входа в систему, поскольку do c говорит

Настройка имени пользователя

По умолчанию Laravel использует поле электронной почты для аутентификации. Если вы хотите настроить это, вы можете определить метод имени пользователя на вашем LoginController:

public function username()
{
    return 'agency_email';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...