繁体   English   中英

Laravel - 除了登录控制器之外,Auth::user 数据返回 null

[英]Laravel - Auth::user data return null except Login Controller

我正在使用自定义表创建用户身份验证。 在我的登录控制器中,身份验证工作正常并重定向到仪表板。 但是当我要使用新控制器创建另一个 url 时,该控制器没有显示用户身份验证数据。 我想通过构造函数中的身份验证外观获取用户数据。 这怎么可能? 这是我的代码:

网页.php:

<!---Routes for login and dashboard-->

Route::get('/login','CustomLogin@index');
Route::post('/login','CustomLogin@checklogin');
Route::get('/','CustomLogin@SuccessLogin');
Route::get('/logout','CustomLogin@logout');

<!---Routes for other controller where user auth not working-->

Route::get('/add-creditor', 'AddCreditor@index');

CustomLogin.php(控制器):

    <?php

namespace App\Http\Controllers;

use App\library\My_functions;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use App\User;
use Illuminate\Support\Facades\Auth;
use Redirect;
use View;
use Session;
use Cookie;

class CustomLogin extends Controller
{
    public function __construct()
    {
        $this->_myFun = new My_functions;
    }

    public function index()
    {
        if(!Auth::check()) {
            return view('CustomLogin.CustomLogin');
        }
        else{
            Redirect::to(SITE_URL)->send();
        }
    }

    public function username()
    {
        return 'user_name';
    }

    function checklogin(Request $request)
    {
        $this->validate($request, [
           'input-username'     =>      'required',
           'input-password'     =>      'required'
        ]);

        $user_data = array(
            'user_name'  => $request->get('input-username'),
            'password' => $request->get('input-password')
        );

        if(Auth::attempt($user_data)){
            return redirect('/');
        }
        else
        {
            return back()->with('error','Wrong Login Details');
        }
    }

    function SuccessLogin(){
        if (!$this->_myFun->DoLogIn()) {
            Redirect::to(SITE_URL.'login')->send();
        }
        else {
            $data=array();
            return View::make('include.dashboard',$data);
        }
    }

    function logout(Request $request){
        Auth::logout();
        return redirect('/login');
    }

}

函数 DoLogIn()(应用程序/库)

<?php namespace App\library {
use Illuminate\Routing\Controller as BaseController;
use App\library\CreateCrmGuid; // Get custom function
use App\library\FunctionForContact; // Get custom function
use Illuminate\Http\Request;
use Session;
use DB;
use Hash;
use Auth;
use App\User;
class My_functions{

    public function DoLogIn()
    {
        //dd(Auth::user()); /*returns data if run from Login controller but null from Add Creditor controller*/
        if(Auth::check())
        {
            $user_id = Auth::user()->id;
            define('authenticated_user_id' ,$user_id);
            return true;
        }
        else
        {
            return false;
        }
    }
}

添加信用控制器

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Cookie;
use Config;
use App\library\my_functions; // Get custom function
use Redirect;
use DB;
use Session;

class AddCreditor extends Controller
{
    protected $_myFun;

    function __construct(){
        dd(Auth::user());  // this returns null
        $this->_myFun = new My_functions;
        if (!$this->_myFun->DoLogIn()) {
            Redirect::to(SITE_URL.'login')->send();
        }
    }
}

在您的路由中添加auth中间件

Route::middleware(['auth'])->get('/add-creditor', 'AddCreditor@index');

尽管如此,在此之后,您可能无法通过控制器构造函数中的 Auth 门面获取用户数据,但是在您的 Route 方法(即AddCreditor@index您将通过以下方法获取用户数据

Auth::user(); request()->user();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM