Изменение Аутентификации Laravel 5.2

Может кто-нибудь помочь мне изменить Laravelаутентификацию 5.2. Я не могу понять, как правильно настроить миграцию базы данных по умолчанию и некоторую часть настройки аутентификации. Я уже перенес базу данных и создал представления проверки подлинности для проверки подлинности. Затем я попытался откатить изменения, потому что то, что мне нужно сделать, это изменить имена для обоих password_resetsи usersтаблиц и то же самое с обоими полями таблиц. Мне нужно добавить префиксы ко всем полям password_resetsand users. Я исследовал способы, как это сделать, и проверил это. Но, я всегда получаю ошибку каждый раз, когда я отправляю форму, потому что я изменил структуры таблиц. Мне нужно понять, где и что еще я должен изменить после настройки базы данных. Может ли кто-то направлять меня с этим? Я был бы очень признателен. Я очень НовичокLaravel, и я действительно хочу узнать структуру.

Вот мой прогресс:

Поэтому я переименовал таблицы. Я добавил префикс emr_к обоим usersи password_resets
затем для полей emr_usersтаблицы я добавил префикс к полям with usr_и for emr_password_resetsps_.

пользовательская таблица: 2014_10_12_000000_create_users_table

    //some codes

    Schema::create('emr_users', function (Blueprint $table) {
        $table->increments('usr_id');
        $table->string('usr_name');
        $table->string('usr_email')->unique();
        $table->string('usr_password');
        $table->rememberToken();
        $table->timestamps();
    });

    //some codes

таблица password_resets: 2014_10_12_100000_create_password_resets_table

    //some codes

    Schema::create('emr_password_resets', function (Blueprint $table) {
        $table->string('ps_email')->index();
        $table->string('ps_token')->index();
        $table->timestamp('ps_created_at');
    });

    //some codes

После миграции базы данных с помощью php artisan migrateи запуска php artisan serveвсе выглядит хорошо, но когда я тестирую форму входа в систему и отправить его я получаю следующие ошибки:

2/2 QueryException in Connection.php line 673:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'emr.users' doesn't exist (SQL: select * from `users` where `email` = admin@sample.com limit 1)
...

и

1/2 PDOException in Connection.php line 333:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'emr.users' doesn't exist
...

Я решил вышеуказанные ошибки путем редактирования /config/auth.phpфайла. По умолчанию блок кода комментируется в этом файле в строках 73-76. Я раскомментирую блок кода и изменю 'table' => 'users'его на 'table' => 'emr_users'In line 75, что приведет к:

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Authentication Defaults
    |--------------------------------------------------------------------------
    |
    | This option controls the default authentication "guard" and password
    | reset options for your application. You may change these defaults
    | as required, but they're a perfect start for most applications.
    |
    */

    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

    /*
    |--------------------------------------------------------------------------
    | Authentication Guards
    |--------------------------------------------------------------------------
    |
    | Next, you may define every authentication guard for your application.
    | Of course, a great default configuration has been defined for you
    | here which uses session storage and the Eloquent user provider.
    |
    | All authentication drivers have a user provider. This defines how the
    | users are actually retrieved out of your database or other storage
    | mechanisms used by this application to persist your user's data.
    |
    | Supported: "session", "token"
    |
    */

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | User Providers
    |--------------------------------------------------------------------------
    |
    | All authentication drivers have a user provider. This defines how the
    | users are actually retrieved out of your database or other storage
    | mechanisms used by this application to persist your user's data.
    |
    | If you have multiple user tables or models you may configure multiple
    | sources which represent each model / table. These sources may then
    | be assigned to any extra authentication guards you have defined.
    |
    | Supported: "database", "eloquent"
    |
    */

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => AppUser::class,
        ],

        'users' => [                      /* line 73 */
            'driver' => 'database',
            'table' => 'emr_users',       /* line 75 */
        ],                                /* line 76 */
    ],

    /*
    |--------------------------------------------------------------------------
    | Resetting Passwords
    |--------------------------------------------------------------------------
    |
    | Here you may set the options for resetting passwords including the view
    | that is your password reset e-mail. You may also set the name of the
    | table that maintains all of the reset tokens for your application.
    |
    | You may specify multiple password reset configurations if you have more
    | than one user table or model in the application and you want to have
    | separate password reset settings based on the specific user types.
    |
    | The expire time is the number of minutes that the reset token should be
    | considered valid. This security feature keeps tokens short-lived so
    | they have less time to be guessed. You may change this as needed.
    |
    */

    'passwords' => [
        'users' => [
            'provider' => 'users',
            'email' => 'auth.emails.password',
            'table' => 'password_resets',
            'expire' => 60,
        ],
    ],

];

Таким образом, ошибки уходят и распознают emr_usersтаблицу. Но производит еще одну ошибку, когда я пытаюсь отправить снова из формы входа:

2/2 QueryException in Connection.php line 673:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'email' in 'where clause' (SQL: select * from `emr_users` where `email` = admin@sample.com limit 1)
...

и

1/2 PDOException in Connection.php line 333:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'email' in 'where clause'

emailПоле изменено на usr_emailполе, поэтому выше показана ошибка.

Вот содержание AuthController.php

<?php

namespace AppHttpControllersAuth;

use AppUser;
use Validator;
use AppHttpControllersController;
use IlluminateFoundationAuthThrottlesLogins;
use IlluminateFoundationAuthAuthenticatesAndRegistersUsers;

class AuthController extends Controller {
    /*
      |--------------------------------------------------------------------------
      | Registration & Login Controller
      |--------------------------------------------------------------------------
      |
      | This controller handles the registration of new users, as well as the
      | authentication of existing users. By default, this controller uses
      | a simple trait to add these behaviors. Why don't you explore it?
      |
     */

use AuthenticatesAndRegistersUsers,
    ThrottlesLogins;

    /**
     * Where to redirect users after login / registration.
     *
     * @var string
     */
    protected $redirectTo = '/';

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

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return IlluminateContractsValidationValidator
     */
    protected function validator(array $data) {
        return Validator::make($data, [
                    'name' => 'required|max:255',
                    'email' => 'required|email|max:255|unique:users',
                    'password' => 'required|min:6|confirmed',
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return User
     */
    protected function create(array $data) {
        return User::create([
                    'name' => $data['name'],
                    'email' => $data['email'],
                    'password' => bcrypt($data['password']),
        ]);
    }

    /**
     * Handle a login request to the application.
     *
     * @param IlluminateHttpRequest $request
     * @return IlluminateHttpResponse
     * 
     * Overrides AuthenticateUsers.php postLogin function
     */
    public function postLogin(Request $request) {
        $attempt_request = [
            'usr_email' => $request->email,
            'usr_password' => $request->password
        ];

        if (Auth::attempt($attempt_request)) {
            // Authentication passed...
            return redirect()->intended('dashboard');
        }
    }

}

Я хочу понять, как правильно настроить эти таблицы и поля вместе с дизайном аутентификации или структурой Laravel 5.2, чтобы определить, где и что нужно изменить.

Пожалуйста помочь. Спасибо

2 ответа

  1. Сначала вы используете функцию postLogin по умолчанию, предоставляемую laravel. Это здорово, но если вам нужно иметь больше контроля над процессом auth, вы можете переопределить эту функцию.

    Таким образом, в вашем AuthController вы создадите функцию под названием postLogin

    <?php
    
    /**
     * Class AuthController
     * @package App\Http\Controllers\Auth
     */
    class AuthController extends Controller 
    {
      ....
    
        /**
         * Handle a login request to the application.
         *
         * @param \Illuminate\Http\Request $request
         * @return \Illuminate\Http\Response
         */
        public function postLogin(Request $request) 
        {
           if (Auth::attempt(['usr_email' => $request->email, 'password' => $request->password]) {
            // Authentication passed...
            return redirect()->intended('dashboard');
          }
          ....
        }
    
    }
    

    Теперь к вам App\User Model добавить следующую функцию

    /**
     * Get the password for the user.
     *
     * @return string
     */
    public function getAuthPassword()
    {
        return $this->usr_password;
    }
    

    Теперь для вашей таблицы сброса пароля просто измените имя таблицы в config / auth.php файл в паролях.пользователи.таблица

     /*
    |--------------------------------------------------------------------------
    | Resetting Passwords
    |--------------------------------------------------------------------------
    |
    | Here you may set the options for resetting passwords including the view
    | that is your password reset e-mail. You may also set the name of the
    | table that maintains all of the reset tokens for your application.
    |
    | You may specify multiple password reset configurations if you have more
    | than one user table or model in the application and you want to have
    | separate password reset settings based on the specific user types.
    |
    | The expire time is the number of minutes that the reset token should be
    | considered valid. This security feature keeps tokens short-lived so
    | they have less time to be guessed. You may change this as needed.
    |
    */
    
    'passwords' => [
        'users' => [
            'provider' => 'users',
            'email' => 'auth.emails.password',
            'table' => 'emr_password_resets',
            'expire' => 60,
        ],
    ],
    
  2. У вас нет столбцов для электронной почты по звуку, следовательно, ошибка.

    Проверьте свои миграции для таблицы пользователи,

    возможно, потребуется добавить

    $table — > string (’email’) — >>unique();

    А затем запустить php artisan migrate. Для вставки полей