我正在努力使它,所以我可以作为管理员模拟用户在我的应用程序。我知道这个错误
Trying to get property 'type' of non-object这条线上
if($user->type !== 1) //1 for type admin在someUserController.php中
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Auth;
use App\Models\User;
class someUserController extends Controller
{
public function __construct()
{
$this->middleware('auth');
$id = Auth::id();
$user = User::find($id);
//echo '<pre>ID:'.$id.' - '.print_r($user,1); die();
if($user->type !== 1) //1 for type admin
{
echo ' error not admin (nice try!).';
die();
}
}
public function impersonate($id)
{
Auth::logout(); // for end current session
Auth::loginUsingId($id);
return redirect()->to('dashboard');
}
}路由web.php
Route::get('/impersonate/{id}', [someUserController::class, 'impersonate']);
Route::get('dashboard', function () {
$id = \Illuminate\Support\Facades\Auth::id();
$user = \App\Models\User::find($id);
//echo '<pre>'.print_r($user,1); die();
if(!$user->active) return redirect('404-page');
switch($user->type)
{
case 1: return redirect('x-url-dashboard-1'); break;
case 2: return redirect('x-url-dashboard-2'); break;
case 3: return redirect('x-url-dashboard-3'); break;
}这是我刀片文件中的链接。
<a href="{{ url('impersonate') }}/{{ $user->id }}" class="btn btn-success">Enter as {{$user->name}}</a>发布于 2021-01-01 08:19:49
之所以发生这种情况,是因为User::find($id);返回null,这表明数据库中没有指定id的用户。
在任何情况下,您都会发现使用Auth::user()更容易,就像使用当前代码一样,您将在没有实际原因的情况下发出两个数据库调用。
要解决您的问题,请检查$id是否是您认为应该的。
发布于 2021-01-01 08:46:30
作为对“Jason”解释的跟进,您可以尝试如下所示:
public function __construct()
{
$this->middleware('auth');
if(Auth::user()->type !== 1)
{
abort(403);
}
}https://stackoverflow.com/questions/65528188
复制相似问题