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简介
Oct 09 PHP
PHP伪静态页面函数附使用方法
Jun 20 PHP
PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
Oct 11 PHP
PHP版 汉字转码的实现详解
Jun 09 PHP
php中将数组转成字符串并保存到数据库中的函数代码
Sep 29 PHP
php使用strtotime和date函数判断日期是否有效代码分享
Dec 25 PHP
php时间计算相关问题小结
May 09 PHP
学习PHP Cookie处理函数
Aug 09 PHP
php实现博客,论坛图片防盗链的方法
Oct 15 PHP
php usort 使用用户自定义的比较函数对二维数组中的值进行排序
May 02 PHP
PHP实现的分页类定义与用法示例
Jul 05 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
Sep 16 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/25 PHP
APACHE的AcceptPathInfo指令使用介绍
2013/01/18 PHP
解析PHP中常见的mongodb查询操作
2013/06/20 PHP
PHP获取页面执行时间的方法(推荐)
2016/12/10 PHP
thinkphp中的多表关联查询的实例详解
2017/10/12 PHP
PHP实现爬虫爬取图片代码实例
2021/03/03 PHP
JS代码放在head和body中的区别分析
2011/12/01 Javascript
详解nodeJS中读写文件方法的区别
2017/03/06 NodeJs
Restify中接入Socket.io报Error:Can’t set headers的错误解决
2017/03/28 Javascript
详解Vue如何支持JSX语法
2017/11/10 Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
2018/08/30 Javascript
更改BootStrap popover的默认样式及popover简单用法
2018/09/13 Javascript
vue中使用百度脑图kityminder-core二次开发的实现
2019/09/26 Javascript
countup.js实现数字动态叠加效果
2019/10/17 Javascript
TypeScript高级用法的知识点汇总
2019/12/17 Javascript
js布局实现单选按钮控件
2020/01/17 Javascript
node.js基于dgram数据报模块创建UDP服务器和客户端操作示例
2020/02/12 Javascript
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
2020/07/15 Javascript
在vue中对数组值变化的监听与重新响应渲染操作
2020/07/17 Javascript
[13:40]TI3青蛙君全程回顾 DOTA2我们为梦想再战
2013/09/13 DOTA
[03:26]回顾2015国际邀请赛中国区预选赛
2015/06/09 DOTA
python中字符串前面加r的作用
2015/06/04 Python
Python编程中flask的简介与简单使用
2018/12/28 Python
Python笔记之代理模式
2019/11/20 Python
PyTorch 随机数生成占用 CPU 过高的解决方法
2020/01/13 Python
阿波罗盒子:Apollo Box
2017/08/14 全球购物
上课说话检讨书大全
2014/01/22 职场文书
初一家长会邀请函
2014/01/31 职场文书
乡镇网格化管理实施方案
2014/03/23 职场文书
企业人事任命书
2014/06/05 职场文书
改作风抓落实促发展心得体会
2014/09/10 职场文书
个人先进材料范文
2014/12/30 职场文书
房产销售员2015年终工作总结
2015/10/22 职场文书
2016教师给学生的毕业寄语
2015/12/04 职场文书
幼儿园教师辞职信
2019/06/21 职场文书
redis连接被拒绝的解决方案
2021/04/12 Redis