laraveli添加一个或多个用户表,以admin为例。

部分文件内容可能需要根据实际情况修改

创建一个Admin模型

php artisan make:model Admin -m

  

编写admins表字段

Schema::create('admins', function (Blueprint $table) {

    $table->increments('id');

    $table->string('name')->unique();

    $table->string('password');

    $table->rememberToken();

    $table->timestamps();

});

  

编辑admin模型

<?php

namespace App;

use Illuminate\Notifications\Notifiable;

use Illuminate\Foundation\Auth\User as Authenticatable;

/**

 * @property int $id

 * @property \Carbon\Carbon $created_at

 * @property \Carbon\Carbon $updated_at

 */

class Admin extends Authenticatable

{

    use Notifiable;

    protected $fillable = [

        'name', 'password','remember_token'

    ];

    protected $hidden = [

        'password','remember_token'

    ];

}

  

修改auth.php配置文件

'guards' => [

    ...

    'admin' => [

        'driver' => 'session',

        'provider' => 'admins'

    ]

],

'providers' => [

    ...

    'admins' => [

        'driver' => 'eloquent',

        'model' => App\Admin::class,

    ]

],

  

在app/Http/Controllers下创建目录Admin/Auth

在Admin目录下创建文件HomeController.php(这个文件用来测试登录成功后的跳转页面)

<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;

use Illuminate\Http\Request;

class HomeController extends Controller

{

    /**

     * HomeController constructor.

     */

    public function __construct()

    {

        $this->middleware('auth:admin');

    }

    /**

     * Show the application dashboard.

     *

     * @return \Illuminate\Http\Response

     */

    public function index()

    {

        return view('admin.home');

    }

}

  

使用命令生成一个Request

php artisan make:request AdminLoginRequest

  

此时在app/Http/Request目录下便生成了这个文件,然后编辑这个文件

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class AdminLoginRequest extends FormRequest

{

    /**

     * 确定用户是否有权发出此请求.

     *

     * @return bool

     */

    public function authorize()

    {

        return true;

    }

    /**

     * 获取适用于请求的验证规则.

     *

     * @return array

     */

    public function rules()

    {

        return [

            'name'     => 'required',

            'password' => ['required', 'min:6'] //密码必须,最小长度为6

        ];

    }

}

  

在Admin/Auth目录下创建文件LoginController.php

<?php

namespace App\Http\Controllers\Admin\Auth;

use App\Http\Controllers\Controller;

use App\Http\Requests\AdminLoginRequest;

use Illuminate\Support\Facades\Auth;

class LoginController extends Controller

{

    public function showLoginForm()

    {

        return view('admin.auth.login');

    }

    public function postLogin(AdminLoginRequest $loginRequest)

    {

        $data = $loginRequest->only('name', 'password');

        $result = Auth::guard('admin')->attempt($data, true);

        if ($result) {

            return redirect(route('admin.home'));

        } else {

            return redirect()->back()

                ->with('name', $loginRequest->get('name'))

                ->withErrors(['name' => '用户名或密码错误']);

        }

    }

    public function postLogout()

    {

        Auth::guard('admin')->logout();

        return redirect(route('admin.login.show'));

    }

}

  

添加路由。打开app/providers/RouteServiceProvider.php

在方法mapWebRoutes()方法后面增加一个方法

protected function mapAdminWebRoutes()

    {

        Route::middleware('web')

            ->prefix('admin')

            ->namespace($this->namespace)

            ->group(base_path('routes/admin.php'));

    }

  

在map()方法里调用上面增加的方法

public function map()

    {

        $this->mapApiRoutes();

        $this->mapAdminWebRoutes();//调用新增的方法

        $this->mapWebRoutes();

    }

  

在routes目录下增加一个路由文件admin.php

<?php

Route::get('login','Admin\Auth\LoginController@showLoginForm')

    ->middleware('guest:admin')

    ->name('admin.login.show');

Route::get('/','Admin\HomeController@index')

    ->name('admin.home');

Route::post('login','Admin\Auth\LoginController@postLogin')

    ->middleware('guest:admin')

    ->name('admin.login.post');

Route::post('logout','Admin\Auth\LoginController@postLogout')

    ->middleware('auth:admin')

    ->name('admin.logout');

  

把home.blade.php复制到resources/views/admin下

把layouts/app.blade.php复制为layouts/admin.blade.php,修改相应的地方

<ul class="nav navbar-nav navbar-right">

    <!-- Authentication Links -->

    @guest('admin')

        <li><a href="{{ route('admin.login.show') }}">admin Login</a></li>

    @else

    <li class="dropdown">

        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false" aria-haspopup="true">

            {{ Auth::guard('admin')->user()->name }} <span class="caret"></span>

        </a>

        <ul class="dropdown-menu">

            <li>

                <a href="{{ route('admin.logout') }}"

                    onclick="event.preventDefault();

                    document.getElementById('logout-form').submit();">

                    Logout

                </a>

                <form id="logout-form" action="{{ route('admin.logout') }}" method="POST" style="display: none;">

                    {{ csrf_field() }}

                </form>

            </li>

        </ul>

    </li>

    @endguest

</ul>

  

把login.blade.php复制到admin/Auth目录下

@extends('layouts.admin')@section('content')

    <div class="container">

        <div class="row">

            <div class="col-md-8 col-md-offset-2">

                <div class="panel panel-default">

                    <div class="panel-heading">Admin Login</div>

                    <div class="panel-body">

                        <form class="form-horizontal" method="POST" action="{{ route('admin.login.post') }}">

                            {{ csrf_field() }}

                            <div class="form-group{{ $errors->has('name') ? ' has-error' : '' }}">

                                <label for="name" class="col-md-4 control-label">E-Mail Address</label>

                                <div class="col-md-6">

                                    <input id="name" type="text" class="form-control" name="name"

                                           value="{{ old('name') }}" required autofocus>

                                    @if ($errors->has('name'))

                                        <span class="help-block">

                                        <strong>{{ $errors->first('name') }}</strong>

                                    </span>

                                    @endif

                                </div>

                            </div>

                            <div class="form-group{{ $errors->has('password') ? ' has-error' : '' }}">

                                <label for="password" class="col-md-4 control-label">Password</label>

                                <div class="col-md-6">

                                    <input id="password" type="password" class="form-control" name="password" required>

                                    @if ($errors->has('password'))

                                        <span class="help-block">

                                        <strong>{{ $errors->first('password') }}</strong>

                                    </span>

                                    @endif

                                </div>

                            </div>

                            <div class="form-group">

                                <div class="col-md-8 col-md-offset-4">

                                    <button type="submit" class="btn btn-primary">

                                        Login

                                    </button>

                                </div>

                            </div>

                        </form>

                    </div>

                </div>

            </div>

        </div>

    </div>

@endsection

  

数据填充

php artisan make:seed AdminsTableSeeder

  

编辑AdminsTableSeeder.php

public function run()

    {

        \App\Admin::insert([

            'name'=>'yzha5',

            'password'=> bcrypt('123456')

        ]);

    }

DatabaseSeeder.php

$this->call(AdminsTableSeeder::class);

  

文件上传至服务器,登入服务器,执行填充命令

php artisan migrate

php artisan db:seed

  

此时,直接打开http://xxx/admin并不会跳转到http://xxx/admin/login,因此需要处理一些异常。打开app/Exceptions/Handle.php

重写unauthenticated()方法。

use Illuminate\Support\Facades\Route;

protected function unauthenticated($request, AuthenticationException $exception)

    {

        return starts_with(Route::currentRouteName(), 'admin')

            ? redirect(route('admin.login.show'))

            : parent::unauthenticated($request, $exception);

    }

  

完善一下

以上代码,当admin登录后,再次访问/admin/login这个URI时,会自动跳转到/home这个URI,这是因为guest这个中间件默认跳转到了/home,也就是middleware目录下的RedirectIfAuthenticated.php这个文件。

解决方法为:

创建一个中单件,名为:RedirectIfAdminAuthenticated

php artisan make:middleware RedirectIfAdminAuthenticated

  

编辑这个文件:

<?php

namespace App\Http\Middleware;

use Closure;

use Illuminate\Support\Facades\Auth;

class RedirectIfAdminAuthenticated

{

    /**

     * Handle an incoming request.

     *

     * @param $request

     * @param Closure $next

     * @param null $guard

     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector|mixed

     */

    public function handle($request, Closure $next, $guard = null)

    {

        if (Auth::guard($guard)->check()) {

            return redirect('/admin');

        }

        return $next($request);

    }

}

  

在Kernel.php中添加一行

protected $routeMiddleware = [

        ...

        'admin.guest' => \App\Http\Middleware\RedirectIfAdminAuthenticated::class,

        ...

    ];

更改admin路由,将guest:admin改为admin.guest:admin

Route::get('login','Admin\Auth\LoginController@showLoginForm')

    ->middleware('admin.guest:admin')

    ->name('admin.login.show');

Route::post('login','Admin\Auth\LoginController@postLogin')

    ->middleware('admin.guest:admin')

    ->name('admin.login.post');

  

 

以上就是laravel如何实现多用户体系登录的详细内容

更多学习内容请访问:

八重樱:腾讯T3-T4标准精品PHP架构师教程目录大全,只要你看完保证薪资上升一个台阶(持续更新)

laravel如何实现多用户体系登录的更多相关文章

  1. Laravel开发:多用户登录验证(2)

    上一篇讲了最基本的User验证,现在来讲一下Admin的验证. 先贴代码, 路由:routes/web.php加上以下代码, //... Route::get('admin/login', 'Admi ...

  2. Laravel开发:多用户登录验证(1)

    之前实现了一次,后来代码忘记放哪了,所以有跳了一次坑. 先贴上Laravel自带的验证代码: 路由:routes/web.php // Authentication Routes... $this-& ...

  3. php的laravel框架快速集成微信登录

    最终的解决方案是:https://github.com/liuyunzhuge/php_weixin_provider,详细的介绍请往下阅读. 本文面向的是php语言laravel框架的用户,介绍的是 ...

  4. Windows Server 2012 配置远程桌面帐户允许多用户同时登录

    网上找了很多关于设置远程桌面最大连接数的文章,大都是说先要到控制面板的管理工具中设置远程桌面会话主机等,大体和我之前的文章<设置WINDOWS SERVER 2008修改远程桌面连接数>里 ...

  5. win7凭据管理、win7多用户远程登录、主机头设置、nuget.org无法访问

    前言  最近遇到的几个问题,然后处理在此对处理方式进行记录一下. 1.服务器共享文件夹,在本机进行访问登录时,每次登录或者每次开机进入都要进行登录的权限认证,这样很麻烦. 2.服务器难免会有多用户同时 ...

  6. [ssh]如何设计ARM板上多用户key登录系统

    如何设计ARM板上多用户key登录系统

  7. laravel 的passport Oauth 认证登录请求 的 oauth_token 重置

    laravel 的passport Oauth 认证登录请求 的 oauth_token 重置    使用API登录认证是需要获取访问令牌,方法为: 参数: grant_type —— 密码模式固定为 ...

  8. Windows2008R2允许多用户远程登录设置

    Windows 2008 R2终端服务器安装配置 后面的一律下一步就可以安装完成了,下面是如何设置多用户远程登陆. Windows2008允许多用户远程登录设置 服务器重启,以上配置全部生效.

  9. win10多用户远程登录

    实现效果:不同的电脑可以同时登录一台windows主机,但是必须使用不同的账号 首先,我们来创建一个新用户 点击设置,搜索用户 点击下一步,一个普通用户就创建完成了. 然后,打开远程设置,右键此电脑, ...

随机推荐

  1. 从wordpress换hexo博客后

    之前用wordpress做blog, 为什么换为hexo呢? 第一 ​ wordpress的文章都保存在服务器的数据库, 维护不是很直观. ​ 而hexo是自己编写markdown文章,本地一份,而b ...

  2. log4p踩坑总结

    log4p可以方便的打印格式化日志,在实际应用时,因没有好好理解官网中的配置文件,导致出错了几次. 现总结如下: 1. 安装 pip3 install log4p 2. 查看配置说明,请参考https ...

  3. GDB调试系列之了解GDB

    想要熟练利用GDB进行程序调试,首先要了解什么是GDB. 1. 什么是GDB GDB (the GNU Project Debugger) 是一个可以运行在大多数常见的UNIX架构.Windows.M ...

  4. USB小白学习之路(10) CY7C68013A Slave FIFO模式下的标志位(转)

    转自良子:http://www.eefocus.com/liangziusb/blog/12-11/288618_bdaf9.html CY7C68013含有4个大端点,可以用来处理数据量较大的传输, ...

  5. org.springframework.jdbc.UncategorizedSQLException: ### Error updating database. Cause: java.sql.SQLException: Incorrect string value: '\xE2\x80\x8B\xE2\x80\x8B...' for column 'pro_backgroud' at row

    如果你在mysql数据库中,将所有的表的编码格式设置成为utf-8之后还是不行,那就试试这个吧:ALTER TABLE your_database_name.your_table CONVERT TO ...

  6. 大马提权详细过程webshell到提权

    .在shell路径这一栏里输入服务器端cmd.exe对应的绝对路径,这里用我们刚刚上传上去的smallchao.exe 8.WINDOWS常见命令:net user 查看所有用户query user ...

  7. 小白学 Python 数据分析(11):Pandas (十)数据分组

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  8. LeetCode 278.First Bad Version(E)(P)

    题目: You are a product manager and currently leading a team to develop a new product. Unfortunately, ...

  9. 基于Unix Socket的可靠Node.js HTTP代理实现(支持WebSocket协议)

    实现代理服务,最常见的便是代理服务器代理相应的协议体请求源站,并将响应从源站转发给客户端.而在本文的场景中,代理服务及源服务采用相同技术栈(Node.js),源服务是由代理服务fork出的业务服务(如 ...

  10. Java继承中构造器的调用原理

    Java的继承是比较重要的特性,也是比较容易出错的地方,下面这个例子将展示如果父类构造器中调用被子类重写的方法时会出现的情况: 首先是父类: public class test { void fun( ...