Laravel 5.3 Auth登录疑惑

我使用Auth进行登录验证,Auth::attempt 验证通过后,页面进行跳转到用户中心,但是经过中间Auth::check()进行验证,就无法验证通过..

不知道什么问题?求指教..

{ {

路由文件

 // 后台
Route::group(['namespace' => 'Backend', 'prefix' => 'Backend', 'middleware' => ['auth.admin']], function () {
    Route::get('center', 'CenterController@index');
});

// 登录
Route::group(['middleware' => ['web']], function () {

    // 后台登录
    Route::get('Backend/login', 'Backend\MemberController@login');
    Route::post('Backend/login', 'Backend\MemberController@in');
    Route::post('Backend/logout', 'Backend\LoginController@logout');
});

} }

这个是后台中间件..

/**
  • @abstract 后台登录前中间件

  • @author Yxl <zccem@163.com>

    */
    

    namespace App\Http\Middleware;

    use Closure;
    use Illuminate\Support\Facades\Auth;

    class AuthAdmin {

       /**
    • Handle an incoming request.
      *

    • @param \Illuminate\Http\Request $request

    • @param \Closure $next

    • @return mixed
      */

         public function handle($request, Closure $next) {
      

      if (!Auth::guard('admin')->check()) {

         if ($request->ajax() || $request->wantsJson()) {
             return response('Unauthorized.', 401);
         } else {
             return redirect()->guest('Backend/login');
         }

      }

      return $next($request);

         }
      

    }

登录页面.验证已经通过..但就是上面中间件那里check()就不行.查看user()为空.

<?php

/**
  • @abstract 后台登录控制器

  • @author Yxl <zccem@163.com>

    */
    

    namespace App\Http\Controllers\Backend;

    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Auth;
    use App\Http\Controllers\Controller;
    use Validator;

    class MemberController extends Controller {

       /**
    • @abstract 登录页面
      */

         public function login() {

      return view('backend.member.index');

         }
      
         /**
    • @abstract 登入
      */

         public function in(Request $request) {
      

      if ($request->ajax()) {

         $validator = Validator::make($request->all(), [
                     'username' => 'required|max:50',
                     'password' => 'required|max:50',
         ]);
      
         if ($validator->fails()) {
             return response()->json($validator->errors());
         }
      
         if (!Auth::guard('admin')->attempt(['username' => $request->input('username'), 'password' => $request->input('password'), 'is_using' => 'On'], $request->input('remember_me'))) {
             // The user is not active, not suspended, and exists.
             return response()->json('认证用户失败!!');
         }
      
         return response()->json(TRUE);

      }

      return;

         }
      
         /**
    • @abstract 忘记密码
      */

         public function forget(Request $request) {
      

      if ($request->ajax()) {

      }

      return view('backend.member.forget');

         }
      
         /**
    • @abstract 注销用户
      */

         public function logout() {

      Auth::logout();
      return;

         }
      

    }

JellyBool

这种基本就是 session 的问题,大概就是你的路由,中间件和 session 的设置有问题吧。目前你提供的信息我也看不出什么问题

yixianliu 回复 JellyBool

兄弟我也看了你的帖子,我基本和你一样,但我在路由上加web,也没用…

yixianliu 回复 JellyBool

session设置?我基本没动过呢…

JellyBool 回复 yixianliu

行吧,我看不出什么问题。good luck

yixianliu 回复 JellyBool

加QQ?76708633…想和你深入探讨…

JellyBool 回复 yixianliu

算了,我 QQ 不讨论技术问题。

yixianliu 回复 JellyBool

那具体问题,我怎么和你讨论?这里又说不清楚…

yixianliu 回复 JellyBool

我看过了,我的是Laravel 5.3 Windows …这样说把,我用Auth验证通过了,可以打印Auth::user()里面的内容出来,但跳转到Auth::check(),就卡住了…打印Auth::user()为空

JellyBool 回复 yixianliu

所以,你的 路由,控制器和相关的代码呢?

yixianliu 回复 JellyBool

怎么发出来?

yixianliu 回复 JellyBool

代码终于可以贴上来了,兄弟你看看

JellyBool 回复 yixianliu

你是在哪里使用 Auth::check 出问题?路由注册在是 web.php 下面的路由么

yixianliu 回复 JellyBool

不是

// 后台
Route::group([‘namespace’ => ‘Backend’, ‘prefix’ => ‘Backend’, ‘middleware’ => [‘auth.admin’]], function () {
Route::get(‘center’, ‘CenterController@index’);
});

JellyBool 回复 yixianliu

所以你是在哪里出了问题,那这些路由是在哪里写的?

额。。。我发现跟你沟通起来还是有点困难

yixianliu 回复 JellyBool

一般般困难啦,慢慢来,我的环境是Laravel 5.3 … routes/web.php 里面的

我登录页面输入正确的帐号密码,代码(Auth)也验证通过,验证通过就跳转到上面的后台地址center,后台地址使用了中间件AuthAdmin,然后用Auth::check()验证,却失败了

JellyBool 回复 yixianliu
Auth::guard('admin')->check()

这样可能就是你的需求。

没必要慢慢来,我只是觉得太浪费时间了而已。早把问题描述清楚,早解决了

yixianliu 回复 JellyBool

我代码也是这样写的,但是验证不通过呢…我已经贴代码了…

JellyBool 回复 yixianliu

你是说中间件这个:

public function handle($request, Closure $next) {

        if (!Auth::guard('admin')->check()) {

            if ($request->ajax() || $request->wantsJson()) {
                return response('Unauthorized.', 401);
            } else {
                return redirect()->guest('Backend/login');
            }
        }

        return $next($request);
    }

这个 (!Auth::guard('admin')->check()) 没起作用?所以花了这么多时间,现在才知道问题出在哪里。。。

yixianliu 回复 JellyBool

对.我后台登录明明就验证通过了,但是到这个中间件,却判断验证失败,而且在这个中间件打印user()信息,也为空,…不知道怎么处理,路由器也加上了web…

yixianliu 回复 JellyBool

付费的???

koizora 回复 yixianliu

投资在学习上的时间和软妹币总有一天会回赠给你自己 !

kylesean 回复 yixianliu

web 中间件在 5.2.2x 好像就默认取消了,不需要手动添加,如果手动了会影响 session。再者,5.3版本的中间件修改了执行流程,所以,推荐中间件写在控制器里的构造函数内,估计你们的问题出在上面。