как создать тип пользователя для cms и обычный профиль для моего торгового проекта в laravel - PullRequest
0 голосов
/ 21 января 2020

Я новичок в Laravel и использую версию 5.8. Я пытаюсь создать торговый сайт с 2 типами AUTH, один для cms и один для пользователя. Пользователь может покупать товары с моего сайта. Для этого мне нужно разделить два типа входа: один - вход в систему cms Admin, а другой - вход пользователя. Я хочу знать, как я могу это сделать. Может кто-нибудь мне помочь. для профиля клиента я использую web.php файл и группу маршрутов пользователей, как это я делю:

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', [
    'uses' => 'ProductController@getIndex',
    'as' => 'product.index'
]);

Route::get('/add-to-cart/{id}', [
    'uses' => 'ProductController@getAddToCart',
    'as' => 'product.addToCart'
]);

Route::get('/shopping-cart', [
    'uses' => 'ProductController@getCart',
    'as' => 'product.shoppingCart'
]);

Route::get('/checkout', [
    'uses' => 'ProductController@getCheckout',
    'as' => 'checkout'
]);

Route::post('/checkout', [
    'uses' => 'ProductController@postCheckout',
    'as' => 'checkout'
]);

Route::group(['prefix' => 'user'], function (){

    Route::group(['middleware' => 'guest'], function (){
        Route::get('/signup', [
            'uses' => 'UserController@getSignup',
            'as' => 'user.signup',
        ]);

        Route::post('/signup', [
            'uses' => 'UserController@postSignup',
            'as' => 'user.signup',
        ]);

        Route::get('/signin', [
            'uses' => 'UserController@getSignin',
            'as' => 'user.signin',
        ]);

        Route::post('/signin', [
            'uses' => 'UserController@postSignin',
            'as' => 'user.signin',
        ]);
    });

    Route::group(['middleware' => 'auth'], function (){
        Route::get('/profile', [
            'uses' => 'UserController@getProfile',
            'as' => 'user.profile',
        ]);

        Route::get('/logout', [
            'uses' => 'UserController@getLogout',
            'as' => 'user.logout',
        ]);
    });
});

Мне нужен еще один AUTH для cms, чтобы администратор мог загружать товары для продажи

Ответы [ 2 ]

1 голос
/ 21 января 2020

Вам не нужно использовать отдельные login logi c для разных типов пользователей. Вы можете централизовать эту логику c, изменив вашу текущую таблицу пользователей. Все, что вам нужно сделать, это назначить роли пользователям. Например, создайте свойство role в своей таблице пользователей, где вы можете иметь две разные роли:

  1. Администратор
  2. Пользователь

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

public function handle( $request, Closure $next, $guard = null ) {
        if ( Auth::guard( $guard )->check() ) { //check if user is authenthicated
            $user = Auth::user();
            switch ( $user->role ) {
                case 'admin':
                    return redirect( )->route('admin');
                    break;
                case 'user':
                    return redirect()->route('user');
                    break;
                default:
                    return redirect( '/' );
            }
        }
        return $next( $request );
    }

Итак, в этом примере мы проходим роли аутентифицированного пользователя, чтобы определить, какую страницу он должен перенаправить. Это базовый c пример того, как обрабатывать разные роли для пользователей, но он должен дать вам представление о том, как работает этот материал, и помочь вам в решении вашей проблемы. Вы можете прочитать больше о Laravel во встроенной системе аутентификации на официальном документе 1016 *, где вы можете найти больше методов, которые обрабатывают функциональность logi c. Надеюсь, что это поможет вам и приведет вас в правильном направлении.

0 голосов
/ 21 января 2020

Создайте модель администратора, например, в app\Models скажем, Admin.php. Go к вашему config\auth.php файлу и под Аутентификационными гвардейцами сделайте что-то вроде этого

/*
|--------------------------------------------------------------------------
| 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',
    ],

    'admin' => [
        'driver' => 'session',
        'provider' => 'admins',
    ],

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

В том же файле под провайдерами сделайте что-то вроде этого

 /*
|--------------------------------------------------------------------------
| 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' => App\User::class,
    ],

    'admins' => [
        'driver' => 'eloquent',
        'model' => App\Models\Admin::class,
    ],

    // 'users' => [
    //     'driver' => 'database',
    //     'table' => 'users',
    // ],
],

ШАГ ВТОРОЙ Откройте Authenticate.php в папке app\Http\Middleware и сделайте так, чтобы она выглядела примерно так

/**
 * Determine if the user is logged in to any of the given guards.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  array  $guards
 * @return void
 *
 * @throws \Illuminate\Auth\AuthenticationException
 */
protected function authenticate($request, array $guards)
{
    if (empty($guards)) {
        $guards = [null];
    }

    foreach ($guards as $guard)
    {
        if ($this->auth->guard($guard)->check()) {
            return $this->auth->shouldUse($guard);
        }
    }

    $guard = $guards[0];

    if ($guard == 'admin')
    {
        $request->path = 'url-to-admin-login-page';
    }
    else
    {
        $request->path = '';
    }

    throw new AuthenticationException(
        'Unauthenticated.', $guards, $this->redirectTo($request)
    );
}


/**
 * Get the path the user should be redirected to when they are not authenticated.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return string
 */
protected function redirectTo($request)
{
    if (! $request->expectsJson())
    {
        return route($request->path.'login');
        //return route('login');
    }
}

STEP THREE Откройте RedirectIfAuthenticated.php в папке app\Http\Middleware и измените ее на

/**
 * 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)
{
    switch ($guard)
    {
        case 'admin' :
        {
            if (Auth::guard($guard)->check())
            {
                return redirect('url-to-admin-home');//the url to admin home
            }
            break;
        }
        default :
        {
            if (Auth::guard($guard)->check())
            {
                return redirect('/home');
            }
            break;
        }
    }

    return $next($request);
}

ШАГ ЧЕТВЕРТЫЙ Наконец, во всех ваших классах контроллера администратора убедитесь, что в их конструкторе вы добавили охрану 'auth:admin для их защиты. Например,

<?php

пространство имен App \ Http \ Controllers;

use App \ Http \ Controllers \ Controller; use App \ Models \ Admin;

Класс AdminController расширяет конструктор контроллера {/ ** * AdminController. * / publi c function __construct () {$ this-> middleware ('auth: admin'); }

public function index()
{
    return view('admin.home');
}

}

Обращаем ваше внимание: рекомендуется закомментировать оригинальный код, а не удалять его.

...