Laravel 5 4 实现前后台登录

在官网下载 Laravel 5.4 配置并能在访问

php artisan make:auth
复制代码

生成后路由文件 routes/web.php ,自动有

Auth::routes();

Route::get('/home', 'HomeController@index');
复制代码

运行

php artisan migrate
复制代码

执行命令后会生成 users 表和 password_resets 表,既 用户表和密码重置表。可以测试用户登录,注册,找回密码功能。 ##自定义用户表登录 在 config/auth.php 配置如下:

  <?php
return [
    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],
    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],
    ],
    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
    ],
    'passwords' => [
        'users' => [
            'provider' => 'users',
            'email' => 'auth.emails.password',
            'table' => 'password_resets',
           'expire' => 60,
        ],
    ],
];
复制代码

认证是由 guardsproviders 两部分构成的, defaults 配置是默认选择一个 guard 认证驱动,所以我们在这两个配置项中分别添加一个 adminadmins 选项。

<?php
  'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'admin' => [
            'driver' => 'session',
            'provider' => 'admins',
        ],
  'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
        'admins' => [
            'driver' => 'eloquent',
            'model' => App\Models\Admin::class,
        ],
    ],
复制代码

创建后台用户表和model

  php artisan make:model Admin
  php artisan make:migration creaet_admins_table
复制代码

在数据库迁移文件 _create_admins_table , 我们可以复制 users 迁移文件里的字段

  Schema::create('admins', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email');
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
复制代码

执行php artisan migrate ###生成临时数据 在 database/factories/ModelFactory.php, 添加如下数据:

$factory->define(App\Admin::class, function (Faker\Generator $faker) {
    static $password;

    return [
        'name' => $faker->name,
        'password' => $password ?: $password = bcrypt('123456'),
        'email' =>  $faker->email,
        'remember_token' => str_random(10),
    ];
});
复制代码

打开命令行输入:

  php artisan tinker
  use App;
  factory(App\Admin::class,5)->create() 
  //生成5条测试数据,你要几条就输入多少(Class,num)
复制代码

###更改 Admin 模型类

  <?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class Admin extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
}
复制代码

###创建控制器

php artisan make:controller Admin/LoginController
php artisan make:controller Admin/AdminController
复制代码

编辑 Admin/LoginController.php

<?php

namespace App\Http\Controllers\Admin;

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

class LoginController extends Controller
{
    use AuthenticatesUsers;

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

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest:admin', ['except' => 'logout']);
        $this->username = config('admin.global.username');
    }

    /**
     * 重写登录视图页面
     */
    public function showLogin()
    {
        return view('admin.login.index');
    }

    /**
     * 自定义认证驱动
     * @return mixed
     */
    protected function guard()
    {
        return auth()->guard('admin');
    }


}

复制代码

修改 app\Http\Middleware\RedirectIfAuthenticated.php:

public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->check()) {
            // 根据不同 guard 跳转到不同的页面
            $url = $guard ? 'admin/dash':'/home';
            return redirect($url);
        }

        return $next($request);
    }
复制代码

编辑 Admin\AdminController.php

<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;

class AdminController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth.admin:admin');
    }
    //
    public function index()
    {
        dd('用户名:'.auth('admin')->user()->name);
    }
复制代码
   php artisan make:middleware AdminAuthMiddleware
复制代码

编辑 app\Http\Middleware\AdminAuthMiddleware.php

public function handle($request, Closure $next, $guard = null)
    {
        if (Auth::guard($guard)->guest()) {
            if ($request->ajax() || $request->wantsJson()) {
                return response('Unauthorized.', 401);
            } else {
                return redirect()->guest('admin/login');
            }
        }
        return $next($request);
    }
复制代码

app\Http\Kernel.php 中注册:

protected $routeMiddleware = [
       ··· ···
        'auth.admin' => \App\Http\Middleware\AdminAuthMiddleware::class,
    ];
复制代码

###注册路由 编辑 routes/web.php

Route::group(['prefix' => 'admin','namespace' => 'Admin'],function ($router)
{
    $router->get('login', 'LoginController@showLogin')->name('admin.login');
    $router->post('login', 'LoginController@login');
    $router->post('logout', 'LoginController@logout');

    $router->get('index', 'AdminController@index');
});
复制代码

###视图文件创建和修改 复制 resources\views\auth\login.blade.php,到 resources\views\admin\login\index.blade.php,修改表单提交地址

 {{ url('/login') }} 改成 {{ route('admin.login') }}
复制代码

访问 你的站点/admin/login

###另外知识点:

发现后台经常是用用户名登录的,而不是邮箱。

更改LoginController.php添加:

/**
     * @return string
     */
    public function username()
    {
        return 'name';//登录名
    }
复制代码

后修改 resources\views\admin\login\login.blade.php 把邮箱相关的html删除换成

<div class="form-group">
      <label for="name" class="col-md-4 control-label">Name</label>
      <div class="col-md-6">
        <input id="name" type="text" class="form-control" name="name" value="{{ old('name') }}">
      </div>
</div>
复制代码

转载于:https://juejin.im/post/5a333e6551882505d46073f6

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值