【发布时间】:2017-03-14 08:56:23
【问题描述】:
我在 Laravel 5.3 上,我正在使用视图,我打算将一个变量全局共享给我的所有视图,这个全局变量包含当前登录的用户信息。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use View;
//use models
use App\profile;
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
View::share('user_info',profile::where('username',Auth::user()->username)->get());
}
public function index()
{
$current_page = 'home';
return view('pages.home');
}
}
但不幸的是它给了我这个错误
HomeController.php 第 27 行中的 ErrorException:尝试获取属性 非对象的
第27行就是这一行
View::share('user_info',profile::where('username',Auth::user()->username)->first());
问题似乎是 'Auth::user()->username' 因为如果我手动指定用户名,它会为我提供所需的集合。
有什么想法,请帮忙?
这是我用来修改身份验证内容的 AuthenticatesUsers.php。
<?php
namespace Illuminate\Foundation\Auth;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Lang;
trait AuthenticatesUsers
{
use RedirectsUsers, ThrottlesLogins;
/**
* Show the application's login form.
*
* @return \Illuminate\Http\Response
*/
public function showLoginForm()
{
return view('auth.login');
}
/**
* Handle a login request to the application.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function login(Request $request)
{
$this->validateLogin($request);
// If the class is using the ThrottlesLogins trait, we can automatically throttle
// the login attempts for this application. We'll key this by the username and
// the IP address of the client making these requests into this application.
if ($this->hasTooManyLoginAttempts($request)) {
$this->fireLockoutEvent($request);
return $this->sendLockoutResponse($request);
}
$credentials = $this->credentials($request);
if ($this->guard()->attempt($credentials, $request->has('remember'))) {
return $this->sendLoginResponse($request);
}
// If the login attempt was unsuccessful we will increment the number of attempts
// to login and redirect the user back to the login form. Of course, when this
// user surpasses their maximum number of attempts they will get locked out.
$this->incrementLoginAttempts($request);
return $this->sendFailedLoginResponse($request);
}
/**
* Validate the user login request.
*
* @param \Illuminate\Http\Request $request
* @return void
*/
protected function validateLogin(Request $request)
{
$this->validate($request, [
$this->username() => 'required', 'password' => 'required',
]);
}
/**
* Get the needed authorization credentials from the request.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
protected function credentials(Request $request)
{
return $request->only($this->username(), 'password');
}
/**
* Send the response after the user was authenticated.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
protected function sendLoginResponse(Request $request)
{
$request->session()->regenerate();
$this->clearLoginAttempts($request);
return $this->authenticated($request, $this->guard()->user())
?: redirect()->intended($this->redirectPath());
}
/**
* The user has been authenticated.
*
* @param \Illuminate\Http\Request $request
* @param mixed $user
* @return mixed
*/
protected function authenticated(Request $request, $user)
{
//check user role
return redirect('/app/system/dashboard');
}
/**
* Get the failed login response instance.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
protected function sendFailedLoginResponse(Request $request)
{
return redirect()->back()
->withInput($request->only($this->username(), 'remember'))
->withErrors([
$this->username() => Lang::get('auth.failed'),
]);
}
/**
* Get the login username to be used by the controller.
*
* @return string
*/
public function username()
{
return 'username';
}
/**
* Log the user out of the application.
*
* @param Request $request
* @return \Illuminate\Http\Response
*/
public function logout(Request $request)
{
$this->guard()->logout();
$request->session()->flush();
$request->session()->regenerate();
return redirect('/');
}
/**
* Get the guard to be used during authentication.
*
* @return \Illuminate\Contracts\Auth\StatefulGuard
*/
protected function guard()
{
return Auth::guard();
}
}
【问题讨论】:
-
如果 Auth::user 未定义(登录),则可能只是重定向回登录页面以防止此类错误
if (!Auth::check()) { redirect('/login'); } -
@NewbeeDev:为什么我必须这样做?
-
您正在获取 Auth::user() 但您没有登录 Auth::user 返回空。 Auth::user 只有在您登录时才会被填写
-
@NewbeeDev 我确实确保我已登录。我尝试了 'if (!Auth::check()) { redirect('/login'); }' 只是为了检查我是否真的登录并且它没有将我重定向到登录页面,而是将我重定向到登录用户的管理仪表板页面
-
试试
var_dump(Auth::id());看看有没有结果,让我看看结果
标签: php laravel laravel-5 laravel-5.3