laravel 6 登录成功但重定向到登录页面
laravel 6 login successfully but redirect to login page
我的环境是MACOS上的MAMP服务器。
LoginController.php
public function authenticate(Request $request)
{
$this->validate($request, [
'email' => 'required|email',
'password' => 'required|min:8'
]);
if (Auth::guard('web')->attempt(['email' => $request->email, 'password' => $request->password,'isactive'=>true], $request->get('remember'))) {
try{
$isAdmin = auth()->user()->isAdmin;
$data = Permission::select('route','retailer_access','distributor_access')
->where('method','GET')
->get();
$urlData = [];
foreach($data as $url){
$myurl['route'] = $url['route'];
switch($isAdmin){
case 0:
$myurl['access'] = $url['retailer_access'];
break;
case 1:
$myurl['access'] = $url['distributor_access'];
break;
case 2:
$myurl['access'] = true;
break;
}
array_push($urlData,$myurl);
}
$is_admin = false;
if($isAdmin == 2){
$is_admin=true;
}
$arr = ['urlData'=>$urlData,'is_admin'=>$is_admin];
session($arr);
return redirect()->intended('/home');
}
catch(Exception $e){
return back()->with('failed','Invalid email or password.')
->withInput($request->only('email'));
}
}
return back()->with('failed','Invalid email or password.')
->withInput($request->only('email'));
}
HomeController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
$this->middleware('permission');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Contracts\Support\Renderable
*/
public function index()
{
return view('home');
}
}
我在会话中设置的以下数组。
Array (
[0] => Array ( [route] => setting/servicetype/add [access] => 1 )
[1] => Array ( [route] => setting/servicetype [access] => 1 )
[2] => Array ( [route] => setting/api/edit/{id} [access] => 1 )
[3] => Array ( [route] => setting/api/add [access] => 1 )
[4] => Array ( [route] => setting/api [access] => 1 )
[5] => Array ( [route] => setting/carrier [access] => 1 )
[6] => Array ( [route] => wallet/details/{id?} [access] => 1 )
[7] => Array ( [route] => wallet [access] => 1 )
[8] => Array ( [route] => permission [access] => 1 )
[9] => Array ( [route] => home [access] => 1 )
[10] => Array ( [route] => user/edit/{id} [access] => 1 )
[11] => Array ( [route] => user/add [access] => 1 )
[12] => Array ( [route] => user [access] => 1 )
[13] => Array ( [route] => about [access] => 1 )
[14] => Array ( [route] => logout [access] => 1 )
[15] => Array ( [route] => password/confirm [access] => 1 )
[16] => Array ( [route] => password/reset/{token} [access] => 1 )
[17] => Array ( [route] => password/reset [access] => 1 )
[18] => Array ( [route] => register [access] => 1 )
[19] => Array ( [route] => login [access] => 1 )
[20] => Array ( [route] => / [access] => 1 )
[21] => Array ( [route] => api/user [access] => 1 )
[22] => Array ( [route] => _ignition/styles/{style} [access] => 1 )
[23] => Array ( [route] => _ignition/scripts/{script} [access] => 1 )
[24] => Array ( [route] => _ignition/health-check [access] => 1 )
[25] => Array ( [route] => settings/edit/{id} [access] => 1 )
)
我的环境中的会话元素是否有任何限制?当会话元素小于 25 时,它可以正常工作,但是当我再添加一个键值时,就会出现此问题。
请帮助我了解这里的问题是什么。
我找到了这个问题的解决方案。我正在使用 cookie 会话驱动程序,所以我将数组 $arr(在 LoginController.php 中)转换为 json_ecoded 字符串。
$arrstr = json_encode($arr);
并使用 push() 方法放入会话。
$request->session->push('permission',$arrstr);
使用 json_decode 方法取回 app.blade.php 中的 urlData 和 is_admin like
<?php
$permission = session('permission');
$perArray = json_decode($permission[0],true);
$urlData = $perArray['urlData']; $is_admin = $perArray['is_admin'];
?>
我的环境是MACOS上的MAMP服务器。
LoginController.php
public function authenticate(Request $request)
{
$this->validate($request, [
'email' => 'required|email',
'password' => 'required|min:8'
]);
if (Auth::guard('web')->attempt(['email' => $request->email, 'password' => $request->password,'isactive'=>true], $request->get('remember'))) {
try{
$isAdmin = auth()->user()->isAdmin;
$data = Permission::select('route','retailer_access','distributor_access')
->where('method','GET')
->get();
$urlData = [];
foreach($data as $url){
$myurl['route'] = $url['route'];
switch($isAdmin){
case 0:
$myurl['access'] = $url['retailer_access'];
break;
case 1:
$myurl['access'] = $url['distributor_access'];
break;
case 2:
$myurl['access'] = true;
break;
}
array_push($urlData,$myurl);
}
$is_admin = false;
if($isAdmin == 2){
$is_admin=true;
}
$arr = ['urlData'=>$urlData,'is_admin'=>$is_admin];
session($arr);
return redirect()->intended('/home');
}
catch(Exception $e){
return back()->with('failed','Invalid email or password.')
->withInput($request->only('email'));
}
}
return back()->with('failed','Invalid email or password.')
->withInput($request->only('email'));
}
HomeController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
$this->middleware('permission');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Contracts\Support\Renderable
*/
public function index()
{
return view('home');
}
}
我在会话中设置的以下数组。
Array (
[0] => Array ( [route] => setting/servicetype/add [access] => 1 )
[1] => Array ( [route] => setting/servicetype [access] => 1 )
[2] => Array ( [route] => setting/api/edit/{id} [access] => 1 )
[3] => Array ( [route] => setting/api/add [access] => 1 )
[4] => Array ( [route] => setting/api [access] => 1 )
[5] => Array ( [route] => setting/carrier [access] => 1 )
[6] => Array ( [route] => wallet/details/{id?} [access] => 1 )
[7] => Array ( [route] => wallet [access] => 1 )
[8] => Array ( [route] => permission [access] => 1 )
[9] => Array ( [route] => home [access] => 1 )
[10] => Array ( [route] => user/edit/{id} [access] => 1 )
[11] => Array ( [route] => user/add [access] => 1 )
[12] => Array ( [route] => user [access] => 1 )
[13] => Array ( [route] => about [access] => 1 )
[14] => Array ( [route] => logout [access] => 1 )
[15] => Array ( [route] => password/confirm [access] => 1 )
[16] => Array ( [route] => password/reset/{token} [access] => 1 )
[17] => Array ( [route] => password/reset [access] => 1 )
[18] => Array ( [route] => register [access] => 1 )
[19] => Array ( [route] => login [access] => 1 )
[20] => Array ( [route] => / [access] => 1 )
[21] => Array ( [route] => api/user [access] => 1 )
[22] => Array ( [route] => _ignition/styles/{style} [access] => 1 )
[23] => Array ( [route] => _ignition/scripts/{script} [access] => 1 )
[24] => Array ( [route] => _ignition/health-check [access] => 1 )
[25] => Array ( [route] => settings/edit/{id} [access] => 1 )
)
我的环境中的会话元素是否有任何限制?当会话元素小于 25 时,它可以正常工作,但是当我再添加一个键值时,就会出现此问题。 请帮助我了解这里的问题是什么。
我找到了这个问题的解决方案。我正在使用 cookie 会话驱动程序,所以我将数组 $arr(在 LoginController.php 中)转换为 json_ecoded 字符串。
$arrstr = json_encode($arr);
并使用 push() 方法放入会话。
$request->session->push('permission',$arrstr);
使用 json_decode 方法取回 app.blade.php 中的 urlData 和 is_admin like
<?php
$permission = session('permission');
$perArray = json_decode($permission[0],true);
$urlData = $perArray['urlData']; $is_admin = $perArray['is_admin'];
?>