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 相关文章推荐
基于mysql的论坛(4)
Oct 09 PHP
dedecms 制作模板中使用的全局标记图文教程
Mar 11 PHP
php的POSIX 函数以及进程测试的深入分析
Jun 03 PHP
PHP实现定时执行任务的方法
Oct 05 PHP
php打印输出棋盘的实现方法
Dec 23 PHP
php导出中文内容excel文件类实例
Jul 06 PHP
PHP中仿制 ecshop验证码实例
Jan 06 PHP
用PHP的socket实现客户端到服务端的通信实例详解
Feb 04 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 PHP
对laravel的session获取与存取方法详解
Oct 08 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
Dec 20 PHP
php封装的page分页类完整实例代码
Feb 01 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
NO3第三帝国留言簿制作过程
2006/10/09 PHP
PHP原生模板引擎 最简单的模板引擎
2012/04/25 PHP
javascript椭圆旋转相册实现代码
2012/01/16 Javascript
探讨javascript是不是面向对象的语言
2013/11/21 Javascript
javascript的创建多行字符串的7种方法
2014/04/29 Javascript
js实现数组转换成json
2015/06/26 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
2016/05/17 Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
2016/05/30 Javascript
AngularJs学习第八篇 过滤器filter创建
2016/06/08 Javascript
javascript学习笔记_浅谈基础语法,类型,变量
2016/09/19 Javascript
Angular的$http与$location
2016/12/26 Javascript
JavaScript表单验证完美代码
2017/03/02 Javascript
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
2017/05/24 Javascript
荐书|您有一份JavaScript书单待签收
2017/07/21 Javascript
深入理解Vue transition源码分析
2017/07/30 Javascript
详解mpvue scroll-view自动回弹bug解决方案
2018/10/01 Javascript
一步步教你利用Docker设置Node.js
2018/11/20 Javascript
jQuery实现input输入框获取焦点与失去焦点时提示的消失与显示功能示例
2019/05/27 jQuery
JS实现判断移动端PC端功能
2020/02/21 Javascript
vue实现把接口单独存放在一个文件方式
2020/08/13 Javascript
[02:42]DOTA2城市挑战赛收官在即 四强之争风起云涌
2018/06/05 DOTA
使用相同的Apache实例来运行Django和Media文件
2015/07/22 Python
Python编程之字符串模板(Template)用法实例分析
2017/07/22 Python
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
python利用小波分析进行特征提取的实例
2019/01/09 Python
Python基础教程之if判断,while循环,循环嵌套
2019/04/25 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
Python实现点云投影到平面显示
2020/01/18 Python
Pycharm和Idea支持的vim插件的方法
2020/02/21 Python
Revolution Beauty美国官网:英国知名化妆品网站
2018/07/23 全球购物
纽约州一群才华横溢的金匠制作而成:Hearth Jewelry
2019/03/22 全球购物
十八届三中全会感言
2014/03/10 职场文书
小学教师暑期培训方案
2014/08/28 职场文书
在校大学生才艺比赛策划书怎么写?
2019/08/26 职场文书
JavaScript canvas实现流星特效
2021/05/20 Javascript
python中的mysql数据库LIKE操作符详解
2021/07/01 MySQL