为什么我在重定向后得到auth :: check()null

时间:2017-11-26 19:16:00

标签: php laravel session authentication

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

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

user.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');

});

logincontroller.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');
}
}

1 个答案:

答案 0 :(得分:0)

您正试图以错误的方式访问您的POSTed数据。您应该使用$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');
    }