【问题标题】:Why I get auth::check() null after redirect为什么我在重定向后得到 auth::check() null
【发布时间】:2018-05-10 01:07:54
【问题描述】:

我的 laravel 版本 5.4.36 PHP版本:7.0.10 wamp 3

当我登录 auth::check() return 1 但在我重定向到其他视图或控制器之后 auth::check() return null 我用 lavavel 5.5 创建了新项目但没有解决如何解决我的问题? 我该怎么办?

用户.php

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
use Notifiable;

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = [
    'ID','Email','first_name','Last_name' ,'username', 'password','typeofuser',
];

/**
 * The attributes that should be hidden for arrays.
 *
 * @var array
 */
protected $hidden = [
    'password',
];
}

kernel.php

 class Kernel extends HttpKernel
                {
                /**
                 * The application's global HTTP middleware stack.
                 *
                 * These middleware are run during every request to your application.
                 *
                 * @var array
                 */
                protected $middleware = [

\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,

\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
                    \App\Http\Middleware\TrimStrings::class,

\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
                    \Illuminate\Session\Middleware\StartSession::class,
                ];

                /**
                 * The application's route middleware groups.
                 *
                 * @var array
                 */
                protected $middlewareGroups = [
                    'web' => [
                        \App\Http\Middleware\EncryptCookies::class,

            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
                        \Illuminate\Session\Middleware\StartSession::class,
                       //  \Illuminate\Session\Middleware\AuthenticateSession::class,
                        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
                        \App\Http\Middleware\VerifyCsrfToken::class,
                        \Illuminate\Routing\Middleware\SubstituteBindings::class,
                    ],



                    'api' => [
                        'throttle:60,1',
                        'bindings',
                    ],
                ];

                /**
                 * The application's route middleware.
                 *
                 * These middleware may be assigned to groups or used individually.
                 *
                 * @var array
                 */
                protected $routeMiddleware = [
                    'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
                    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
                    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
                    'can' => \Illuminate\Auth\Middleware\Authorize::class,
                    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
                    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
                ];
                }

web.php 的一部分

Route::get('/Admin', function () {
   return view('Adminlogin');
});

Route::group(['middleware' => ['web']], function () {
Route::get('/StartExamInfo/{id}', 'ExamController@Info');
Route::post('/Exam', 'ExamController@Start');
Route::post('/result','resultController@Add');

});

登录控制器.php

namespace App\Http\Controllers;

use App\admin;
use App\students;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\hash;
use Validator;
class LoginController extends Controller
{
public function Login(Request $request)
{

    if (Auth::guard('web')->attempt(['username' => $request->username , 'password' => $request->password , 'typeofuser' => 1 ]))
    {
        $admin = new admin();
        $admin->username = $request->username;
        $admin->getuser();
        $user = [$admin->ID,$admin->firstname,$admin->lastname,$admin->email,$admin->phonenumber,$admin->pic,$admin->expirtime];
        return view('Admin_home',['user'=>$user]);
    }
    if (Auth::guard('web')->attempt(['username' => $request->username , 'password' => $request->password , 'typeofuser' => 2 ]))
    {
        $std = new students();
        $std->username = $request->username;
        $std->getuser();
        $user = [$std->ID,$std->firstname,$std->lastname,$std->email,$std->pic,$std->expirtime];
        return view('Student_home',['user'=>$user]);
    }
    else
   return view('AdminLogin');

    //$v = validator::make($request->all());
    //
    //$admin->auth($request->username,$request->password);
}

public function logout()
{
    Auth::logout();
    return view('AdminLogin');
}
}

【问题讨论】:

  • 这到底是什么烂摊子
  • 是的,这个问题是真实存在的
  • 没人能回答我的问题
  • @mh480 嗨到手

标签: php laravel session authentication


【解决方案1】:

任何使用Auth()的路由都必须封装在web中间件中。在Route::group(['middleware' =&gt; ['web']] 函数中移动您的Route::get('/Admin',...

【讨论】:

  • 我做了这个解决方案,但我的问题没有解决
【解决方案2】:

您正试图以错误的方式访问您发布的数据。您应该使用$request 对象获取已发布用户的条目。此外,您可以使用单个身份验证条件对用户进行身份验证。用户通过身份验证后,使用两个简单的条件检查其typeofuser 字段。像这样的:

public function Login(Request $request)
    {
        $credential = $request->only(['username', 'password']);
        if (!Auth::attempt($credential))
            return 'Username or Password is incorrect.';

        // Now you can access to authenticated user model with `users` method in request object
        $user = $request->user();
        if($user->typeofuser == 1)
        {
            $admin = new admin();
            $admin->username = $credential['username'];
            $admin->getuser();
            $user = [$admin->ID,$admin->firstname,$admin->lastname,$admin->email,$admin->phonenumber,$admin->pic,$admin->expirtime];
            return view('Admin_home',['user'=>$user]);
        }
        elseif ($user->typeofuser == 2)
        {
            $std = new students();
            $std->username = $credential['username'];
            $std->getuser();
            $user = [$std->ID,$std->firstname,$std->lastname,$std->email,$std->pic,$std->expirtime];
            return view('Student_home',['user'=>$user]);
        }
        else
            return view('AdminLogin');
    }

【讨论】:

  • 我做了这个解决方案,但我的问题没有解决
  • @HamzehSezvar 你的问题太不清楚了!准确描述您的问题...
猜你喜欢
  • 2016-05-28
  • 1970-01-01
  • 2019-12-05
  • 1970-01-01
  • 2015-12-13
  • 2017-06-25
  • 1970-01-01
  • 2018-01-19
  • 1970-01-01
相关资源
最近更新 更多