Laravel:如何根据每个用户的id为他们提供不同的登录页



我使用的是基本的laravelauth登录和注册代码。我只是在表单中添加了更多的功能。我正试图让每个用户在登录时根据他们的帐户类型重定向到他们自己的不同页面。现在,每个用户在登录时都会重定向到主刀片。如何更改此设置,以便将它们重定向到每个用户的自定义页面?下面是我的代码:

添加用户刀片

@extends('layouts.app')
@section('content')
<div class="container" style="width:60%">
<div class="card">
<div class="card-header">Add New User</div>
<div class="card-body">
{!! Form::open(['action'=>'UserAccountsController@store', 'method'=>'POST']) !!}
@csrf
<div class="form-group row justify-content-center">
{{Form::label('acctyp', 'Account Type',['class'=>'col-md-2'])}}
<div class="col-md-4">
{{Form::select('acctyp',['Adm'=>'Admin','Rcd'=>'Records','Hod'=>'H.O.D','Tch'=>'Teacher','Std'=>'Student'],null,['placeholder'=>'Choose Account...','class'=>'form-control'])}}
</div>
</div>
<div class="form-group row justify-content-center">
{{Form::label('name', 'Name',['class'=>'col-md-2'])}}
<div class="col-md-4">
{{Form::text('name','',['placeholder'=>'Name','class'=>'form-control'])}}
</div>
</div>
<div class="form-group row justify-content-center">
{{Form::label('surname', 'Surname',['class'=>'col-md-2'])}}
<div class="col-md-4">
{{Form::text('surname','',['placeholder'=>'Surname','class'=>'form-control'])}}
</div>
</div>
<div class="form-group row justify-content-center">
{{Form::label('gender', 'Gender',['class'=>'col-md-2'])}}
<div class="col-md-4">
{{Form::select('gender',['F'=>'Female','M'=>'Male','O'=>'Other'],null,['placeholder'=>'Choose Gender...','class'=>'form-control'])}}
</div>
</div>
<div class="form-group row justify-content-center">
{{Form::label('dob', 'Date of Birth',['class'=>'col-md-2'])}}
<div class="col-md-4">
{{Form::date('dob','',['class'=>'form-control'])}}
</div>
</div>
<div class="form-group row justify-content-center">
{{Form::label('email', 'E-mail Address',['class'=>'col-md-2'])}}
<div class="col-md-4">
{{Form::email('email','',['placeholder'=>'E-mail Address','class'=>'form-control'])}}
</div>
</div>
<div class="form-group row justify-content-center">
{{Form::label('userid', 'User I.D',['class'=>'col-md-2'])}}
<div class="col-md-4">
{{Form::text('userid','',['placeholder'=>'User I.D','class'=>'form-control'])}}
</div>
</div>
<div class="form-group row justify-content-center">
{{Form::label('password', 'Password',['class'=>'col-md-2'])}}
<div class="col-md-4">
{{Form::password('password',['placeholder'=>'Password','class'=>'form-control'])}}
</div>
</div>
<div class="form-group row justify-content-center">
{{Form::label('cpassword', 'Confirm Password',['class'=>'col-md-2'])}}
<div class="col-md-4">
{{Form::password('cpassword',['placeholder'=>'Confirm Password','class'=>'form-control'])}}
</div>
</div>
<div class="form-group row justify-content-center">
{{Form::submit('Add User',['class'=>'btn btn-success'])}}
</div>
{!! Form::close() !!}
</div>
</div>
</div>
<script type="text/javascript">
$(document).ready( function() {
$('#userid').on('change', function() {
$('#password').val($(this).val());
$('#cpassword').val($(this).val());
});
});
</script>
@endsection

登录控制器

<?php
namespace AppHttpControllersAuth;
use AppHttpControllersController;
use IlluminateFoundationAuthAuthenticatesUsers;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
}

添加用户控制器

<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use AppUser;
class UserAccountsController extends Controller
{
/**
* Display a listing of the resource.
*
* @return IlluminateHttpResponse
*/
public function index()
{
$accounts = User::all();
return view('users.index')->with('accounts', $accounts);
}
/**
* Show the form for creating a new resource.
*
* @return IlluminateHttpResponse
*/
public function create()
{
return view('users.create');
}
/**
* Store a newly created resource in storage.
*
* @param  IlluminateHttpRequest  $request
* @return IlluminateHttpResponse
*/
public function store(Request $request)
{
$this->validate($request, [
'acctyp'=>'required',
'name'=>'required',
'surname'=>'required',
'gender'=>'required',
'dob'=>'required',
'email'=>'required',
'userid'=>'required',
'password'=>'required',
]);
$account = new User;
$account->acctyp = $request->input('acctyp');
$account->name = $request->input('name');
$account->surname = $request->input('surname');
$account->gender = $request->input('gender');
$account->dob = $request->input('dob');
$account->email = $request->input('email');
$account->userid = $request->input('userid');
$account->password = bcrypt($request->input('password'));
$account->save();
return redirect('/users')->with('success', 'New user successfully added!');
}
/**
* Display the specified resource.
*
* @param  int  $id
* @return IlluminateHttpResponse
*/
public function show($id)
{
$account = User::find($id);
return view('users.show')->with('account', $account);
}
/**
* Show the form for editing the specified resource.
*
* @param  int  $id
* @return IlluminateHttpResponse
*/
public function edit($id)
{
$account = User::find($id);
return view('users.edit')->with('account', $account);
}
/**
* Update the specified resource in storage.
*
* @param  IlluminateHttpRequest  $request
* @param  int  $id
* @return IlluminateHttpResponse
*/
public function update(Request $request, $id)
{
$this->validate($request, [
'acctyp'=>'required',
'name'=>'required',
'surname'=>'required',
'gender'=>'required',
'dob'=>'required',
'email'=>'required',
'userid'=>'required',
'password'=>'required',
]);
$account = User::find($id);
$account->acctyp = $request->input('acctyp');
$account->name = $request->input('name');
$account->surname = $request->input('surname');
$account->gender = $request->input('gender');
$account->dob = $request->input('dob');
$account->email = $request->input('email');
$account->userid = $request->input('userid');
$account->password = bcrypt($request->input('password'));
$account->save();
return redirect('/users')->with('success', 'User successfully updated!');
}
/**
* Remove the specified resource from storage.
*
* @param  int  $id
* @return IlluminateHttpResponse
*/
public function destroy($id)
{
$account = User::find($id);
$account->delete();
return redirect('/users')->with('success', 'User successfully removed!');
}
}

您应该按照以下步骤进行操作:

LoginController.php

覆盖此方法protected $redirectTo = '/home';因此,您需要删除上述代码并添加以下代码:

public function redirectTo(){

$type = Auth::user()->acctyp; 

switch ($type) {
case 'type1':
return '/YOUR PATH';
break;
case 'type2':
return '/YOUR PATH';
break; 
default:
return '/YOUR PATH'; 
break;
}
}

记住在LoginController.php中包含类IlluminateSupportFacadesAuth;

您可以在LoginController上定义一个redirectTo方法,并返回您希望它们重定向到的路径:

protected function redirectTo()
{
// do your logic to decide where to go and return a path
$user = $this->guard()->user();
if ($user->acctyp == 'something') {
return route('something.dashboard');
}
...
}

使用redirectTo方法时,默认设置将尝试将它们重定向到"预期"URL,并回退到从redirectTo返回的内容。(预期是在auth中间件将他们重定向到登录页面之前,他们试图到达的位置(

如果你想完全控制响应,你可以覆盖LoginController上的authenticated方法,它来自AuthenticatesUsers特性,以返回你想要的响应:

protected function authenticated(Request $request, $user)
{
// do your logic here and return a redirect
// to where you want them to go to
if ($user->acctyp == 'something') {
return redirect()->route('something.dashboard')
}
...
}

相关内容

最新更新