Как использовать веб-аутентификаторы и аутентификаторы API в проекте - PullRequest
0 голосов
/ 05 мая 2019

Я уже разработал API, в котором используется паспортная аутентификация, он используется в приложении для реагирования на нативные данные.

Теперь мне нужно разработать некоторые веб-функции для пользователя Admin, я создал модель Admin и перенес ее, но я не знаю, как включить веб-аутентификацию только для модели Admin. Я искал некоторые учебные пособия, но все, что я нашел, касается аутентификации по умолчанию в laravel, и я использовал модель User для аутентификации паспорта.

Пожалуйста, помогите мне !!

Ответы [ 4 ]

1 голос
/ 05 мая 2019

Есть несколько способов подойти к этому.

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

//Create this at app/Http/Middleware/Admin.php
namespace App\Http\Middleware;

use Illuminate\Auth\AuthenticationException;

class Admin
{
    public function handle($request, \Closure $next)
    {
        $admins = [1,32,23];//place your admins IDs here
        //I've hardcoded the admin ids, but you can also check them from a table Admins::all() or column such as auth()->user()->is_admin
        if(!in_array(auth()->user()->id,$admins))
            return throw new AuthenticationException('You are not allowed here');
        return $next($request);
    }
}

, затем добавьте объявление промежуточного программного обеспечения в app / Http / Kernel.php в $ routeMiddleware.

'admin' => App\Http\Middleware\Admin::class,

И используйте его на ваших административных маршрутах

Route::middleware(['auth','admin'])->group(function () {
    //admin routes here
}

2 - Вы также можете заменить все этапы аутентификации на использование пользовательской модели, я делал это один или два раза, но у нее столько побочных эффектов, что просто не стоит.Но если вы решите сделать это, вы можете начать с расширения класса администратора с помощью Authenticable

use Illuminate\Foundation\Auth\User as Authenticatable;

Затем вам нужно будет пойти и также продублировать все файлы в app / Http / Auth, переопределить связкувещей, чтобы использовать свой пользовательский класс, затем продублируйте все представления, чтобы иметь логин, сбросить пароль и другие вещи.

Поверьте мне, оно того не стоит.Я бы выбрал первый вариант.

1 голос
/ 05 мая 2019

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

if (Auth::user()->account_type === 'admin') {
  // your code.
}

В вашем API или WEB вы просто проверяете наличие нескольких типов и соответственно делаете маршрут

В синтаксисе лезвия (для вашего интерфейса)

@if ( {{Auth::user()->account_type}} === 'admin')

@else  

@endif
0 голосов
/ 05 мая 2019

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

https://medium.com/employbl/easily-build-administrator-login-into-a-laravel-5-app-8a942e4fef37

После того, как я это сделал, было легко понять, как сделать так, чтобы регистрация сначала была одобрена администраторами. Кроме того, вы должны следовать за автором этого урока - у него есть куча хороших вещей!

0 голосов
/ 05 мая 2019

Я нашел этот комментарий в выпуске Laravel Echo, но не смог его воспроизвести вообще. Я попытался создать новое ПО промежуточного уровня под названием Broadcast и сделать это соответствующим образом: class BroadcastMiddleware () {

public function handle() {
$web = Auth::guard('web')->user();
if ($web) {
    return response()->json($web);
}

$api = Auth::guard('api')->user();
if ($api) {
    return response()->json($api);
}
return response()->json('Unauthorized.', 500);
}}

А также попытался настроить маршрут для / broadcast / auth

Route::post('/realtime/auth', function(){
return true;
})->middleware('broadcast');

Однако, используя приведенный выше код, он возвращает модель пользователя; однако вместо этого широковещание / аутентификация Laravel возвращает что-то вроде: auth: "374f7ff42b7da877aa35: c29addedec281b418331a61dc3cfc74da8b108222565fa4924a8 ..."

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...