关于登录前后台的一点点问题。

关于登录认证的一点问题。我用的是一张users表,并没有单独的管理员表。
前台登录认证,直接用的是默认的auth。按照文档的说明,快速认证弄好之后,前台登录、注册以及获取登录后的信息都没有问题。
后台这里,是自己写的控制器

class LoginController extends Controller
{
    //
    public function login(Request $request)
    {
        if($input = Input::all()){
            $users = User::all();
            $email = DB::table('users')->where('id', '1')->value('email');
            $password = DB::table('users')->where('id', '1')->value('password');
            $inputpass = $input['password'];
            //如果输入的密码和邮箱都正确,那么进入后台
            if (Hash::check($inputpass, $password) && $email == $input['email']){
                session(['users'=>$users]);
                return redirect('admin/index');
                //如果不正确,返回当前界面,并提示消息
            }else{
                return back()->with('msg','后台重地,闲人免进');
            }
        }else{
            //如果已经登录过后台,再访问admin/login 直接跳转到admin/index
            if(session('users')){
                return redirect('admin/index');
            }
            return view('admin/login');
        }    
    }
    public function logout()
    {
        session(['users'=>null]);
        return redirect('admin/login');
    }
}

中间件

class AdminLogin
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if(!session('users')){
            return redirect('admin/login');
        }
        return $next($request);
    }
}

然后Kernel.php里添加了一行

protected $routeMiddleware = [
        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        //后台认证路由中间件
        'admin.login' => \App\Http\Middleware\AdminLogin::class,
    ];

路由

Route::any('admin/login','Admin\LoginController@login');//后台登录路由

登录后的路由都放到了admin.login中间件里

这么一顿做下来,前后台可以分别登录,分别注销。但是,在后台页面,我不能像前台那样获取登录信息了。(虽然写死也可以,毕竟只有一个管理员 = =)

// 获取当前通过认证的用户...
$user = Auth::user();

// 获取当前通过认证的用户 ID...
$id = Auth::id();

我该怎么获取后台登录用户的信息呢?有像前台那样方便的默认方法么。
教程: Laravel 5.3 多用户表登录
教程:Laravel5.3 多表验证(包括登录注册,找回密码,发送邮件)
= = 参考了这两篇,我这种自己写的还是没懂怎么获取登录信息。

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

官方文档里看不到详细的信息,看源代码可以看到怎么用的。不过,我用的更笨的办法。我看了社区里许多开源的blog程序,看看他们是怎么处理的。不过数量相当的开源blog,都直接用laravel自带的认证,在代码里看不到过程。
最后在一个不起眼的角落里,发现了需要一步登录的操作,才能把auth信息带进登录后的页面。
还看到一种写法,是把auth信息带在跳转路由参数里带过去了。

Auth::login($user);

或者

return redirect()->route('index',[Auth::user());

这个问题算是解决了,哈哈。

5年前 评论
讨论数量: 1

官方文档里看不到详细的信息,看源代码可以看到怎么用的。不过,我用的更笨的办法。我看了社区里许多开源的blog程序,看看他们是怎么处理的。不过数量相当的开源blog,都直接用laravel自带的认证,在代码里看不到过程。
最后在一个不起眼的角落里,发现了需要一步登录的操作,才能把auth信息带进登录后的页面。
还看到一种写法,是把auth信息带在跳转路由参数里带过去了。

Auth::login($user);

或者

return redirect()->route('index',[Auth::user());

这个问题算是解决了,哈哈。

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!