Laravel搭建后台登录系统步骤详解


Posted in PHP onJuly 26, 2016

本文实例讲述了Laravel搭建后台登录系统的方法。分享给大家供大家参考,具体如下:

今天想用laravel搭建一个后台系统,就需要最简单的那种,有用户登录系统,试用了下,觉得laravel的用户登录这块做的还真happy。当然,前提就是,你要的用户管理系统是最简单的那种,就是没有用户权限,能登录就好。

我这里就不用默认的user表做例子了,那样很容易和laravel的一些默认设置混淆。

首先确认,后台的用户表,我设计表叫做badmin,每个管理员有用户名(username),有昵称(nickname),有邮箱(email),有密码(password)

这里玩个花,使用laravel的migration来建立表(实际上可以用不着使用这个工具建立表)

1 安装好最基本的laravel框架

2 创建migration文件:

./artisan migrate:make create-badmin-table

3 发现app/database/migration/下面多了一个php文件:

2014_10_19_090336_create-badmin-table.php

4 往up和down里面增加内容;

<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateBadminTable extends Migration {
   /**
   * Run the migrations.
   *
   * @return void
   */
   public function up()
   {
     Schema::create('badmin', function($table)
     {
       $table->increments('id');
        $table->string('nickname', 100)->unique();
        $table->string('username', 100)->unique();
        $table->string('email', 100)->unique();
        $table->string('password', 64);
        $table->timestamps();
     });
   }
   /**
   * Reverse the migrations.
   *
   * @return void
   */
   public function down()
   {
     Schema::drop('badmin');
   }
}

5 配置好local的database,app/config/local/database.php

<?php
return array(
  'fetch' => PDO::FETCH_CLASS,
  'default' => 'mysql',
  'connections' => array(
    'mysql' => array(
      'driver'  => 'mysql',
      'host'   => 'localhost',
      'database' => 'test',
      'username' => 'yejianfeng',
      'password' => '123456',
      'charset'  => 'utf8',
      'collation' => 'utf8_unicode_ci',
      'prefix'  => '',
    ),
  ),
  'migrations' => 'migrations',
);

6 创建数据表:

./artisan migrate --env=local

这个时候去数据库看,就发现多了一张badmin表,数据结构如下:

CREATE TABLE `badmin` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `nickname` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
 `username` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
 `email` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
 `password` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
 `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
 `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
 PRIMARY KEY (`id`),
 UNIQUE KEY `badmin_nickname_unique` (`nickname`),
 UNIQUE KEY `badmin_username_unique` (`username`),
 UNIQUE KEY `badmin_email_unique` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

要问这里为什么多出了create_at和update_at,这是laravel默认为每个表创建的字段,而且在使用Eloquent进行增删改查的时候能自动更新这两个字段

7 创建个Model:

<?php
use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;
class Badmin extends Eloquent implements UserInterface, RemindableInterface {
   use UserTrait, RemindableTrait;
   protected $table = 'badmin';
   protected $hidden = array('password');
   public static $rules = [
     'nickname' => 'required|alpha_num|min:2',
     'username' => 'required',
     'email'=>'required|email|unique:badmin',
     'password'=>'required|alpha_num|between:6,12|confirmed',
   ];
}

这里必须要implements UserInterface和RemindableInterface

8 把model和Auth关联上,修改app/config/auth.php

<?php
return array(
   // 默认的用户验证驱动
   // 可以是database或者eloquent
   'driver' => 'eloquent',
   // 只有驱动为eloquent的时候才有用
   'model' => 'Badmin',
);

这里的driver可以是eloquent或者database,使用eloquent就告诉Auth组件说,用户认证类是Badmin这个类管的。这里的model是有命名空间的,就是说如果你的admin类是\Yejianfeng\Badmin,这里就应该改成'\Yejianfeng\Badmin'

9 好了,这个时间其实逻辑部分已经搭建完毕了,你已经可以在controller种使用

Auth::attempt(XXX) 做权限认证

Auth::user() 获取登录用户(一个Badmin类)
等。

10 下面要建立一个用户登录页面:

Laravel搭建后台登录系统步骤详解

11 设置路由:

<?php
// 不需要登录验证的接口
Route::get('/', ['as' => 'user.login','uses'=>'UserController@getLogin']);
Route::get('user/login', ['as' => 'login', 'uses' => 'UserController@getLogin']);
Route::post('user/login', ['as' => 'login', 'uses' => 'UserController@postLogin']);
// 需要登录验证才能操作的接口
Route::group(array('before' => 'auth'), function()
{
  Route::get('user/logout', ['as' => 'logout', 'uses' => 'UserController@getLogout']);
  Route::get('user/dashboard', ['as' => 'dashboard', 'uses' => 'UserController@getDashboard']);
});

12 设置controller:

<?php
class UserController extends BaseController {
   // 登录页面
   public function getLogin()
   {
     return View::make('user.login');
   }
   // 登录操作
   public function postLogin()
   {
     if (Auth::attempt(array('email'=>Input::get('email'), 'password'=>Input::get('password')))) {
       return Redirect::to('user/dashboard')
       ->with('message', '成功登录');
     } else {
       return Redirect::to('user/login')
          ->with('message', '用户名密码不正确')
          ->withInput();
     }
   }
   // 登出
   public function getLogout()
   {
     Auth::logout();
     return Redirect::to('user/login');
   }
   public function getDashboard()
   {
     return View::make('user.dashboard');
   }
   // 添加新用户操作
   public function getCreate()
   {
     return View::make('user.create');
   }
   // 添加新用户操作
   public function postCreate()
   {
     $validator = Validator::make(Input::all(), User::$rules);
     if ($validator->passes()){
        $bAdmin = new Badmin();
        $bAdmin->nickname = Input::get('nickname');
        $bAdmin->username = Input::get('username');
        $bAdmin->email = Input::get('email');
        $user->password = Hash::make(Input::get('password'));
        $user->save();
        Response::json(null);
     } else {
        Response::json(['message' => '注册失败'], 410);
     }
   }
}

13 设置下filter,app/filter.php

Route::filter('auth', function()
{
   if (Auth::guest())
   {
     if (Request::ajax())
     {
        return Response::make('Unauthorized', 401);
     }
     else
     {
        return Redirect::guest('/');
     }
   }
});

将这里认证失败后的地址转到/ 路径

14 设置views/user/login.blade.php

这里截取一部分:

Laravel搭建后台登录系统步骤详解

可以看出,这里可以直接使用Session::has和Session::get

然后基本就完成了...

后记

laravel这里的auth机制还是很方便的,但是migration使用起来总觉得有点憋屈。操作数据库总是隔着一层,不爽。

这里的auth一些简单的用户登录机制已经可以了,但是如果要做更复杂的用户管理权限,估计要使用Sentry(https://cartalyst.com/manual/sentry)这样的第三方组件了。

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
php-cli简介(不会Shell语言一样用Shell)
Jun 03 PHP
浅析php插件 Simple HTML DOM 用DOM方式处理HTML
Jul 01 PHP
ThinkPHP中ajax使用实例教程
Aug 22 PHP
php中Socket创建与监听实现方法
Jan 05 PHP
php操作xml入门之xml基本介绍及xml标签元素
Jan 23 PHP
PHP删除指定目录中的所有目录及文件的方法
Feb 26 PHP
php实现对象克隆的方法
Jun 20 PHP
php使用CutyCapt实现网页截图保存的方法
Oct 03 PHP
PHP与服务器文件系统的简单交互
Oct 21 PHP
Laravel 5.5官方推荐的Nginx配置学习教程
Oct 06 PHP
PHP中cookie知识点学习
May 06 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
Dec 20 PHP
laravel中的错误与日志用法详解
Jul 26 #PHP
Laravel4中的Validator验证扩展用法详解
Jul 26 #PHP
laravel5创建service provider和facade的方法详解
Jul 26 #PHP
Laravel5权限管理方法详解
Jul 26 #PHP
JavaScript实现删除电脑的关机键
Jul 26 #PHP
php 读取输出其他文件的实现方法
Jul 26 #PHP
php实现贪吃蛇小游戏
Jul 26 #PHP
You might like
PHP技术开发技巧分享
2010/03/23 PHP
php和js如何通过json互相传递数据相关问题探讨
2013/02/26 PHP
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
2013/08/07 PHP
PHP中preg_match函数正则匹配的字符串长度问题
2015/05/27 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
2019/10/14 PHP
ExtJS实现文件下载的方法实例
2013/11/09 Javascript
浅谈javascript中call()、apply()、bind()的用法
2015/04/20 Javascript
JavaScript对HTML DOM使用EventListener进行操作
2015/10/21 Javascript
JavaScript模版引擎的基本实现方法浅析
2016/02/15 Javascript
纯js实现页面返回顶部的动画(超简单)
2017/08/10 Javascript
JavaScript中发出HTTP请求最常用的方法
2018/07/12 Javascript
JS的时间格式化和时间戳转换函数示例详解
2020/07/27 Javascript
vue实现lodop打印功能的示例
2020/11/11 Javascript
[01:35]2018年度CS GO最佳战队-完美盛典
2018/12/17 DOTA
python使用新浪微博api上传图片到微博示例
2014/01/10 Python
Python实现提取文章摘要的方法
2015/04/21 Python
Python实现发送QQ邮件的封装
2017/07/14 Python
利用Python暴力破解zip文件口令的方法详解
2017/12/21 Python
python3处理含有中文的url方法
2018/05/10 Python
python画图系列之个性化显示x轴区段文字的实例
2018/12/13 Python
python实现求特征选择的信息增益
2018/12/18 Python
python实现猜拳小游戏
2020/04/05 Python
python处理自动化任务之同时批量修改word里面的内容的方法
2019/08/23 Python
TensorFlow命名空间和TensorBoard图节点实例
2020/01/23 Python
Python中文分词库jieba,pkusegwg性能准确度比较
2020/02/11 Python
python里的单引号和双引号的有什么作用
2020/06/17 Python
python编写实现抽奖器
2020/09/10 Python
python 使用tkinter+you-get实现视频下载器
2020/11/17 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
2021/01/27 Python
CSS3制作翻转效果_动力节点Java学院整理
2017/07/11 HTML / CSS
HTML5进阶段内联标签汇总(小篇)
2016/07/13 HTML / CSS
Melijoe英国官网:法国儿童时尚网站
2016/11/18 全球购物
中国文明网签名寄语
2014/01/18 职场文书
现货白银电话营销话术
2015/05/29 职场文书
php 原生分页
2021/04/01 PHP
oracle delete误删除表数据后如何恢复
2022/06/28 Oracle