Пользовательская аутентификация двух разных пользователей с использованием двух таблиц я не хочу использовать make: auth - PullRequest
0 голосов
/ 03 июля 2018

Первая система аутентификации работает очень хорошо, ее код приведен ниже и необходим для разных пользователей, использующих две разные таблицы. Я использую laravel 5.5

    <?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\User;
use Illuminate\Support\Facades\Auth;

class StudentController extends Controller
{   


    public function Register(Request $request)
    {

        $firstname = $request['firstname'];
        $othername = $request['othername'];
        $email = $request['email'];
        $password = $request['password'];

        $user = new User();
        $user->firstname = $firstname;
        $user->othername = $othername;
        $user->email = $email;
        $user->password = $password;

        $user->save();

        Auth::login($user);

        return redirect()->route('studentDashboard');

    }


    public function Login(Request $request)
    {

      if(Auth::attempt(['email'=> $request['email'], 'password'=> 
$request['password']]))
      {
       return redirect()->route('studentDashboard');
      }
      return redirect()->back();

    }

}

Я продублировал вышеупомянутое, чтобы создать аутентификацию для другого пользователя. Регистрация работает, но вход в систему не работает, даже если данные для входа верны, он возвращает перенаправление назад после оператора if

    <?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Employer;
use Illuminate\Support\Facades\Auth;

class EmployerController extends Controller
{

  public function createEmployerAccount(Request $request)
  {
      $companyName = $request['companyname'];
      $companyEmail = $request['email'];
      $companyPasword = $request['password'];

      $Employer = new Employer();

      $Employer->companyname = $companyName;
      $Employer->email = $companyEmail;
      $Employer->password = $companyPasword;

      $Employer->save();

      Auth::login($Employer);

      return redirect()->route('employersDashboard');

  }

  public function signInEmployer(Request $request)
  {    

       if(Auth::attempt(['email'=>$request['email'], 
'password'=>$request['password']]))
        {

        return redirect()->route('employersDashboard');
      }
       return redirect()->back();
}

}

когда я пытаюсь изменить 'email' на 'emails', появляется сообщение об ошибке -> запрос на выборку идет из таблицы пользователей, а не из таблицы работодателей, из которой мне нужно получать данные, а также когда я изменяю 'пароль' на ' пароли 'отображается ошибка "неопределенный индексный пароль"

это содержимое файла маршрута

Route::get('/',function(){
    return view('pages.index');
})->name('home');

Route::post('/signup',[
    'uses'=>'StudentController@Register',
    'as'=> 'signup'
]);

Route::post('/signin',[
    'uses'=>'StudentController@Login',
    'as'=>'signin'
]);

Route::get('/employers',[
    'uses'=>'PageController@employersPage',
    'as'=>'employers'
]);

Route::get('/studentDashboard',[
    'uses'=>'PageController@getStudentDashboard',
    'as'=> 'studentDashboard'
]);




Route::post('/createcompany',[
    'uses'=>'EmployerController@createEmployerAccount',
    'as'=>'createcompany'
]);

Route::post('/signInEmployer',[
    'uses'=>'EmployerController@signInEmployer',
    'as'=>'signInEmployer'
]);

Route::get('/employersDashboard',[
    'uses'=>'PageController@getEmployersDashboard',
    'as'=> 'employersDashboard',
    'middleware'=>'auth:employer'
]);

Route::post('/createPost',[
    'uses'=>'PostController@postCreatePost',
    'as'=> 'createPost'
]);

1 Ответ

0 голосов
/ 03 июля 2018

Вы должны указать Auth использовать разные Guard для аутентификации во время Employer входа в систему. Чтобы определить охранников для Employer, измените это в вашем config/auth.php.

Найдите раздел guards в auth.php и добавьте новую охрану

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

        'employer' => [
            'driver' => 'session',
            'provider' => 'employers',
        ],

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

Теперь в том же файле есть раздел providers. Вам нужно добавить employers провайдера

'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Models\User::class,
        ],

        //Employer provider
        'employers' => [
            'driver' => 'eloquent', 
            'model' => App\Employer::class,
        ],
    ],

Создание пользовательского промежуточного программного обеспечения Auth

namespace App\Http\Middleware;

use Closure;
use Auth;

class AuthenticateEmployer
{
    public function handle($request, Closure $next)
    {
        //If request does not comes from logged in employer
        //then he shall be redirected to employer Login page
        if (!Auth::guard('employer')->check()) {
            return redirect('/signInEmployer');
        }
        return $next($request);
    }
}

Зарегистрируйте пользовательское промежуточное ПО для авторизации в Kernal.php в routeMiddleware

'employerAuth' => \App\Http\Middleware\AuthenticateEmployer::class,

Теперь мы настроили наше пользовательское guard и пользовательское промежуточное ПО employerAuth

EmployerController

class EmployerController extends Controller
{

    //either you have to define this or you can use `Auth::guard('employer')->attempt($credentials)` in login 

    protected function guard() 
    {
       return Auth::guard('employer');
    }

    public function signInEmployer(Request $request)
    {    
        if(Auth::attempt(['email'=>$request['email'], 
    'password'=>$request['password']]))
        {
            return redirect()->route('employersDashboard');
        }

        return redirect()->back();
    }
}

Для всех маршрутов, защищенных Employer auth, вам нужно либо добавить промежуточное программное обеспечение employerAuth в маршруты, либо добавить employerAuth в каждый контроллер construct, например,

public function __construct()
{
  $this->middleware('employerAuth');
}

Надеюсь, это поможет вам. Для деталей вы можете проверить это https://laravel.com/docs/5.6/authentication#authenticating-users

Проверьте этот хороший пример приложения для мульти-аутентификации https://github.com/yskoverride/Various2.0/tree/master/app

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