首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >学生和管理员的不同登录路径和登录视图

学生和管理员的不同登录路径和登录视图
EN

Stack Overflow用户
提问于 2019-05-18 03:37:03
回答 1查看 977关注 0票数 1

每一只拉拉新手都在与多个星球搏斗,我也不例外

我正在努力建立学生管理系统。管理admin/login和学生student/login将有两种不同的路由。

学生不能自行注册,但他将由管理员注册。

因此,学生只能访问student/dashboard,学生的注册将由admin/dashboard上的管理员完成。

以下是我已经做过的事情:

  1. 为管理员和学生创建迁移。
  2. 为管理员和学生创建了守卫。
  3. 修改了登录控制器,添加了adminLogin和studentLogin方法。
  4. 改进的RedirectIfAuthenticated中间件

Config/auth.php

代码语言:javascript
复制
'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

代码语言:javascript
复制
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

代码语言:javascript
复制
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上可用,将没有管理注册链接。

还限制用户访问管理区域。

**我不想要完整的代码,只需要帮助我遵循的步骤和方式,或者我必须做的改变**

EN

回答 1

Stack Overflow用户

发布于 2019-05-18 11:58:40

我终于解决了。我没有使用php artisan make:auth,而是从零开始使用。

创建了一个新的项目,删除了User.php和迁移。

创建模型Student.phpAdmin.php以及迁移和控制器。

php artisan make:model Student -mc

php artisan make:model Admin -mc

在创建警卫之后,我删除了默认保护(我不知道这样做是正确的,但我觉得如果不需要默认保护,而且它使用的是用户表,所以我就删除了)。这是config/auth.php

代码语言:javascript
复制
'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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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');

现在,在这个时候登录工作。我还需要做很多事。如果有任何建议,我对此表示欢迎,请评论如下。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56195770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档