每一只拉拉新手都在与多个星球搏斗,我也不例外
我正在努力建立学生管理系统。管理admin/login和学生student/login将有两种不同的路由。
学生不能自行注册,但他将由管理员注册。
因此,学生只能访问student/dashboard,学生的注册将由admin/dashboard上的管理员完成。
以下是我已经做过的事情:
RedirectIfAuthenticated中间件Config/auth.php
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'students' => [
'driver' => 'session',
'provider' => 'students',
],
'web-admin'=>[
'driver'=>'session',
'provider'=>'admin',
],
'api' => [
'driver' => 'token',
'provider' => 'students',
'hash' => false,
],
],
'providers' => [
'students' => [
'driver' => 'eloquent',
'model' => App\Student::class,
],
'admin' => [
'driver' => 'eloquent',
'model' => App\Admin::class,
],
'passwords' => [
'students' => [
'provider' => 'students',
'table' => 'password_resets',
'expire' => 60,
],
'admin' => [
'provider' => 'admin',
'table' => 'password_resets',
'expire' => 60,
],
],LoginController.php
lass LoginController extends Controller
{
use AuthenticatesUsers;
public function __construct()
{
$this->middleware('guest')->except('logout');
$this->middleware('guest:web-admin')->except('logout');
$this->middleware('guest:students')->except('logout');
}
public function showAdminLoginForm()
{
return view('admin.login', ['url' => 'admin']);
}
public function adminLogin(Request $request)
{
$this->validate($request, [
'admin_id' => 'required',
'password' => 'required|min:8'
]);
if (Auth::guard('admin')->attempt(['admin_id' => $request->adminid, 'password' => $request->password], $request->get('remember'))) {
return redirect()->intended('/admin/dashboard');
}
return back()->withInput($request->only('admin_id', 'remember'));
}
public function showStudentLoginForm()
{
return view('student.login', ['url' => 'student']);
}
public function studentLogin(Request $request)
{
$this->validate($request, [
'roll_no' => 'required',
'password' => 'required|min:8'
]);
if (Auth::guard('writer')->attempt(['roll_no' => $request->roll_no, 'password' => $request->password], $request->get('remember'))) {
return redirect()->intended('/student/dashboard');
}
return back()->withInput($request->only('roll_no', 'remember'));
}
}RedirectAuthenticated.php
class RedirectIfAuthenticated
{
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
if('web_admin'==='$guard'){
return redirect('/admin/dashboard');
}
return redirect('/admin/login');
}
if (Auth::guard($guard)->check()) {
if('students'==='$guard'){
return redirect('/student/dashboard');
}
return redirect('/student/login');
}
return $next($request);
}
}我在视图中创建了两个文件夹,即学生文件夹和管理文件夹。他们都有两个文件。login.blade.php和dashboard.blade.php
它显示登录,并在auth文件夹下注册。
我想给出两条路线,一条用于/admin/login,它返回admin.login视图。
返回student.login视图的学生student.login也是如此。
我想要删除/register路由,并使链接到admin dashboard上可用,将没有管理注册链接。
还限制用户访问管理区域。
**我不想要完整的代码,只需要帮助我遵循的步骤和方式,或者我必须做的改变**
发布于 2019-05-18 11:58:40
我终于解决了。我没有使用php artisan make:auth,而是从零开始使用。
创建了一个新的项目,删除了User.php和迁移。
创建模型Student.php和Admin.php以及迁移和控制器。
php artisan make:model Student -mc
php artisan make:model Admin -mc
在创建警卫之后,我删除了默认保护(我不知道这样做是正确的,但我觉得如果不需要默认保护,而且它使用的是用户表,所以我就删除了)。这是config/auth.php
'guards' => [
'student'=>[
'driver'=>'session',
'provider'=>'students'
],
'admin'=>[
'driver'=>'session',
'provider'=>'admins'
],
],
'providers' => [
'students'=>[
'driver'=>'eloquent',
'model'=>App\Student::class,
],
'admins'=>[
'driver'=>'eloquent',
'model'=>App\Admin::class,
] 我有两个警卫,学生和管理员。以下是管理模型Admin.php
class Admin extends Authenticatable
{
use Notifiable;
protected $fillable = [
'firstname', 'lastname','admin_id', 'password',
];
protected $hidden = [
'password', 'remember_token',
];
protected $casts = [
'email_verified_at' => 'datetime',
];
}和模范学生Student.php
class Student extends Authenticatable
{
use Notifiable;
protected $fillable = [
'firstname', 'lastname','admin_id', 'password',
];
protected $hidden = [
'password', 'remember_token',
];
protected $casts = [
'email_verified_at' => 'datetime',
];
}之后,我修改了AdminController.php
class AdminsController extends Controller
{
use AuthenticatesUsers;
protected $guard = 'admin';
public function showLogin(){
return view('admin.login');
}
public function dashboard(){
return view('admin.dashboard');
}
public function login(Request $request){
$this->validate($request,[
'admin_id' => 'required',
'password'=>'required|min:8',
]);
if(Auth::guard('admin')->attempt(['admin_id'=>$request['admin_id'], 'password'=>$request['password']])){
return redirect('admin/dashboard');
}
return redirect('/admin');
}
}然后我创建了路由Web.php
Route::get('/', function () {
return view('welcome');
});
Route::get('/admin','AdminsController@showLogin');
Route::get('/student','StudentsController@showLogin');
Route::get('/admin/dashboard','AdminsController@dashboard');
Route::get('/student','StudentsController@showLogin');
Route::post('/admin/login','AdminsController@login');
Route::post('/student/login','StudentsController@login');现在,在这个时候登录工作。我还需要做很多事。如果有任何建议,我对此表示欢迎,请评论如下。
https://stackoverflow.com/questions/56195770
复制相似问题