多表认证登录
打赏作者

chenxin

按着教程做了!最后admin注册后竟然信息注册在users的表里。然后我直接在admin表填入数据,进入admin/login 页面登陆,居然不是跳转到admin页面,而是users的登陆界面.怎么回事啊

JellyBool 回复 chenxin

额,你确定你照着教程来了么?估计哪里写错了吧?把相关代码和配置贴出来看看?

liudong0763

老师,可以来一个5.3版本的多表认证登录么

JellyBool 回复 liudong0763

这个都是一样的吧。。。

lilu 回复 JellyBool

5.3的不太一样,完全照做之后 登录注册都不成功

JellyBool 回复 lilu

嗯哼,这个我还没仔细看过,但是大概看了一下,你可以试试这个解决方案

https://github.com/Hesto/multi-auth

xiaohj001

请问:我在admin注册页面进行注册的时候,数据没有添加到admin表中,却加到users表中,找了好久的原因却没找到。

  • 注册的路由
Route::get('admin/register', 'AdminAuth\AuthController@showRegistrationForm');
Route::post('admin/register', 'AdminAuth\AuthController@register');
  • AuthController.php中的代码
<?php
namespace App\Http\Controllers\AdminAuth;
use App\Admin;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
class AuthController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Registration & Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users, as well as the
    | authentication of existing users. By default, this controller uses
    | a simple trait to add these behaviors. Why don't you explore it?
    |
    */

    use AuthenticatesAndRegistersUsers, ThrottlesLogins;

    /**
     * Where to redirect users after login / registration.
     *
     * @var string
     */
    protected $redirectTo = '/admin';

    protected $guard = 'admin';

    public function showLoginForm()
    {
        return view('admin.auth.login');
    }

    public function showRegistrationForm()
    {
        return view('admin.auth.register');
    }

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|max:255',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|min:6|confirmed',
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return Admin
     */
    protected function create(array $data)
    {
        return Admin::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
        ]);
    }
}
  • Admin.php文件的代码
<?php
namespace App;
use Illuminate\Foundation\Auth\User as Authenticatable;
class Admin extends Authenticatable
{
    protected $table = 'admin';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];
}
  • register.blade.php文件中做修改的代码
<div class="panel-heading">Admin Register</div>
<form class="form-horizontal" role="form" method="POST" action="{ url('/admin/register') }">
</form>
JellyBool 回复 xiaohj001

先看看有没有触发这个方法吧:

   protected function create(array $data)
    {
        return Admin::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
        ]);
    }

一般这种基本上就是复制代码引起的问题,仔细debug一下

xiaohj001 回复 JellyBool

奇怪,找bug找了一上午,都没找出原因,运行也是不对的,刚发帖问了您,再次运行就没问题了。

JellyBool 回复 xiaohj001

这。。。有这么神奇?

xiaohj001 回复 JellyBool

我做的明显的改变就是重启了终端和服务

mikezhang

按着教程实现了,但是这个一般什么情况下使用?

JellyBool 回复 mikezhang

前台用户和后台用户分表

xiaoshen 回复 JellyBool

常规的user 和admin 一般在一个表里面,然后用type来区分开; 分表的好处,是不是有个gurd来保护?可以做一些权限上更细致的判断?

JellyBool 回复 xiaoshen

我的做法通常就是一个表。这个视频是满足那些分表的用户的

Psychic_role

laravel 5.4里面,admin/login有问题怎么解决啊老师,具体问题就是没有查询admin这张表,而是用了users这张表,而register部分已经成功写入数据到admin表中了
routes/web

Route::get('/admin/login',‘AdminAuth\LoginController@showLoginForm');
Route::post('/admin/login', 'AdminAuth\LoginController@login');
Route::post('/admin/logout', 'AdminAuth\LoginController@logout');

admin/login

<div class="panel-heading">Admin Login</div>
                <div class="panel-body">
                <form class="form-horizontal" role="form" method="POST" action="{ url('admin/login') }">

AdminAuth/LoginController

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

class LoginController extends Controller
{
    use AuthenticatesUsers;
    protected $redirectTo = '/admin/login';//修改登录后的返回路径
    protected $guard = 'admin';
    public function showLoginForm()
    {
        return view('admin.login');
    }
JellyBool 回复 Psychic_role

具体问题就是没有查询admin这张表,而是用了users这张表

什么查询?

Psychic_role 回复 JellyBool

admin用户登陆的查询

JellyBool 回复 Psychic_role

额。。什么代码引起的查询?

Psychic_role 回复 JellyBool

按照视频里的步骤写的admin登录,在登陆admin/login页面登录admin账户时不成功,访问的依旧是user表

JellyBool 回复 Psychic_role

这个方法的代码:LoginController@login 看一下

Psychic_role 回复 JellyBool

难道还有个独立的public function login吗?我的loginController在我留言里贴的最后一张就是全部了

Psychic_role 回复 JellyBool

LoginController.php

<?php
namespace App\Http\Controllers\AdminAuth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

class LoginController extends Controller
{
    use AuthenticatesUsers;
    protected $redirectTo = '/admin';//修改登录后的返回路径
    protected $guard = 'admin';
    public function showLoginForm()
    {
        return view('admin.login');
    }
}

请问LoginController@login应该怎么写啊?

JellyBool 回复 Psychic_role

那你这 是 怎么 来的 啊 ?LoginController@login

 public function login()
    {
       if(Auth::guard('admin')->attempt())
    }
Psychic_role 回复 JellyBool

我以为是不是要改动Auth里的’default‘,attempt()这个我不熟悉不知道该用它,谢谢老师

yaoye6262

注册的时候会直接跳转到admin/index 页面 但是登录的时候 不管怎么输入账号密码 都是原页面一直刷新 账号密码都对 注册的时候都是存到了admin数据库中 请问是什么原因 登录的时候一直登录不进admin/index页面

XBisATrouble

请问如果要实现登录admin后访问admin/login跳转回admin/dash该怎么做,现在的情况是会跳转到/home
————————
2017年5月3日09:12:21
已解决
原因是我user和admin界面公用的一个模板控制器,所以在guest中修改
···php

   if (Auth::guard()->check()) {
        $url = '/home';
        return redirect($url);
    }

    if (Auth::guard('admin')->check()) {
        $url = '/admin/dash';
        return redirect($url);
    }

···

hate

逻辑好乱。

b545798400

你好 我想问一下,这个方式做出来的登录认证太类似,如果我想实现教师学生管理员三人的认证,不需要邮箱同时又想在注册时添加年龄等字段,有什么办法吗?

JellyBool 回复 b545798400

如果三个表是分开的话,直接像视频那样再配置 teachers 表。

添加年龄字段的话,直接加就好了

b545798400 回复 JellyBool

谢谢我刚已经看了基类代码,看懂了。
取消邮箱的话,要改

trait AuthenticatesUsers{
...
}

里面的username方法,添加年龄要修改RegisterController里面的create和validator方法

JellyBool 回复 b545798400

恩,不错不错!

zhangbao1992

老师,我不太理解 Guards 这个概念,在 AdminController 中使用 return Auth::guard('admin')->user() 是获得已登录管理员信息的。

我看到 config/auth.app 这个文件里有

    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

也就是说在使用 Auth 门面类的时候, Auth::user() 默认相当于使用 Auth::guard('web')->user()

感觉 Guards 有点 Middleware 的意思?

JellyBool 回复 zhangbao1992

感觉 Guards 有点 Middleware 的意思

没有吧,这两个应用场景不一样的吧

zhangbao1992 回复 JellyBool

我还是没有理解 Auth::guard('web') 的意思,它返回一个 SessionGuard 实例。

我现在能唯一区别 Auth::guard('web')Auth::guard('admin') 不一样的地方,就是前者的数据是 users 表里的,后者是 admin 表里的。

JellyBool 回复 zhangbao1992

恩,对,基本就是这样的啊

zhangbao1992 回复 JellyBool

行 先这样理解吧!

hehorange

我是看了5.1基础之后看这个,这期视频有点跟不上,吃力,该补哪一个呢?

JellyBool 回复 hehorange

具体什么跟不上,你看看学习路径下的 后端工程师之路

hehorange 回复 JellyBool

主要是 config/auth.php 中的 guards、providers两个数组,不知道作用是什么。
还有关于中间件的知识都看不懂,基础篇里没有讲到中间件。
另外,用 phpstrom 按快捷键直接跳转到某个类或方法,但并没有显示具体是哪个文件,自己用 sublime 找起来很吃力。

JellyBool 回复 hehorange

你也用 phpstorm 直接跳转不就好了么?为什么要在这些东西上浪费时间

hate

邮箱 如果user表里面有。admin就不能注册了?》

JellyBool 回复 hate

这两个是不冲突的吧。。。

hate 回复 JellyBool

我搞错了,admin 的register a链接是链接到user里。粘贴复制的原因

newbee

我实现了多表登录,但是发现一个问题:如果同时打开了两个浏览器窗口,一个是前台登录,一个是后台登录,在后台登陆后再退出并重新跳转到了后台登录页面,这时候来到前台登录窗口,点击登陆后,虽然成功登录,但是会跳转到后台登录页面,我怀疑是不是因为之前在后台退出后跳转到后台登录页面造成的原因,我后来发现session有些不一样,在后台登录退出后,在前台登录页面打印session发现多了一个url.intended,值就是后台登录地址,我不知道应该怎么处理这个情况

JellyBool 回复 newbee

你在退出登录的时候,自定义跳转地址呗,或者你改 session 的 url.intended

Jarvis5780

看过一些视频,发现你讲的有个特点,尽量说有用的话,很多时候都会做视频剪辑,把没有太大作用的过程去掉,网上有些视频,净说废话,简单的问题说半天,还和你聊天,这点你很赞哦。哈哈,加油

JellyBool 回复 Jarvis5780

哈哈哈,感谢支持!这波很给力

foxriver123

laravel5.5的童鞋请把在控制器重写AuthenticatesUsers里面的guard方法

行觉 回复 foxriver123

点赞怒赞哈哈