Использование пользовательской аутентификации на Laravel 6 - PullRequest
0 голосов
/ 02 марта 2020

Я хотел бы вручную аутентифицировать пользователей в моей компании. Проблема в том, что у меня есть 2 таблицы, называемые Student и Staff, в базе данных Oracle.

Что касается таблицы Student, у меня возникает идея переопределить встроенный метод Auth, предоставляемый командой auth scaffolding. поскольку имя пользователя и пароль хранятся прямо в таблице.

Что касается таблицы Staff, пароль хранится в другом столбце / таблице и шифруется с использованием хранимой процедуры / пакета, поэтому единственный способ получить подтверждение пользователя это вызов пакета, который возвращает только 0 или 1.

Что я сделал,

Я написал свои собственные маршруты и добавил свои собственные функции в LoginController.

public function loginStaff(Request $req){
    $username = Str::upper($req->input('username'));
    $password = $req->input('password');

    $users = PortalUser::where('ID', $username)->firstOrFail();

    if ($users->user_type == 'STAFF'){

       $queryResult = DB::select('select PACKAGE.validStaff(?,?) from dual',[$username, $password]);

       if($queryResult == 1){

              //this is where I would like to auth the user.
              //using Auth::Attempt and Auth::Login will only run the default query
       }

}

Я успешно возвратил значения 1 и 0. В контроллере.

Так есть что-то, что мне не хватает? Или я должен вручную установить сеанс, используя метод session ()?

Спасибо.

Ответы [ 2 ]

1 голос
/ 02 марта 2020

Если вы хотите вручную аутентифицировать пользователей, вы можете легко использовать сеансы. Для справки используйте следующий код:

//this is where I would like to auth the user.
//using Auth::Attempt and Auth::Login will only run the default query

// typically you store it using the user ID, but you can modify the session using other values.     
session()->put('user_id', user id from database here);

. Если вы хотите проверить, прошел ли пользователь аутентификацию, измените промежуточное ПО * 1004 на:

<?php

namespace App\Http\Middleware;

use App\Providers\RouteServiceProvider;
use Closure;
use Illuminate\Support\Facades\Auth;

class RedirectIfAuthenticated
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string|null  $guard
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = null)
    {
        if (session()->has('user_id')) {
            return redirect(  custom path here );
        }

        return $next($request);
    }
}

Когда вы хотите выйти из системы пользователь, просто уничтожьте сеансовый ключ

session()->forget('user_id');

** Примечание: ** многие широковещательные рассылки и аддоны используют систему аутентификации Laravel (Guards), и вам может понадобиться подключиться к их коду, если вы хотите используйте их с вашей собственной системой аутентификации

1 голос
/ 02 марта 2020

Laravel предоставляет Пользовательские драйверы сеансов , которые вы можете использовать для создания или удаления ваших сеансов

<?php

namespace App\Extensions;

class MongoSessionHandler implements \SessionHandlerInterface
{
    public function open($savePath, $sessionName) {}
    public function close() {}
    public function read($sessionId) {}
    public function write($sessionId, $data) {}
    public function destroy($sessionId) {}
    public function gc($lifetime) {}
}

Надеюсь, это поможет, если нет, то прокомментируйте ниже. Поможет вам.

###### Обновление #######

Думаю, тогда вам придется создавать собственные сеансы HTTP из Laravel

Шаг 1 : создайте в вашей базе данных еще одну таблицу для сеанса, например,

Schema::create('sessions', function ($table) {
    $table->string('id')->unique();
    $table->unsignedInteger('user_id')->nullable();
    $table->string('ip_address', 45)->nullable();
    $table->text('user_agent')->nullable();
    $table->text('payload');
    $table->integer('last_activity');
});

Шаг 2 : сохраните данные в В сеансе вы обычно будете использовать метод put или session помощник;

// Via a request instance...
$request->session()->put('key', 'value');

// Via the global helper...
session(['key' => 'value']);

Шаг 3 : Получить ключ для указанного пользователя c, когда ваша функция вернется 1

$value = $request->session()->get('key', function () {
    return 'default';
});

Шаг 4 : Удалите сеанс, через некоторое время вам потребуется удалить сеанс по соображениям безопасности, после чего вы можете это сделать.

$value = $request->session()->pull('key', 'default');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...