• PHP 框架Laravel Eloquent 实现身份验证


    PHP自从5.3后似乎又热度又回升, 最近了解了一下PHP框架之一Laravel, 最近最新的版本已经是4.3  基本的结构这里不讲, 要了解可以在这里看文档 http://v4.golaravel.com/docs/4.2 , 下面只是记录一下身份验证的实现过程

    /***********************
     *    注册 登录 登出 路由
     ***********************/
    Route::get('home/login', function(){
        return View::make('home.login');
    }); 
     
    Route::post('home/login', 'HomeController@login');
     
    Route::get('home/register', function(){
        return View::make('home.register');
    });
     
    Route::post('home/register', 'HomeController@register');
     
    Route::get('home/logout', function(){
        Auth::logout();
        return Redirect::intended('/');
    });

    Laravel提供了一个MVC的机制,使用Eloquent ORM来处理数据库操作, 这里路由定义了HomeController控制器类里面的两个Action方法,一个是home/login, 一个是home/register, 分别处理来自 login.blade.php 和 register.blade.php里页面里的提交的数据。 离开动作home/logout没有使用控制器的动作, 而是直接用Auth类的方法Auth::logout,然后跳转到网站根目录

    下面是register.blade.php页面的内容, 我们看到比较简单,使用了Blade模板,就是一个Form,提交地址,和一些表格元素。

    @extends('home.master')
     
    <h1>注册页面</h1>
    @section('content')
    {{  Form::macro('br', function(){
                return '<br/>';
        })
    }}
     
    {{ Form::open(array('action' => 'HomeController@register', 'method'=>'post')) }}
    {{
     
        Form::label('name','姓名')." ".Form::text('name').Form::br().
     
        Form::label('email','邮箱')." ".Form::text('email').Form::br().
     
        Form::label('password','密码')." ".Form::password('password').Form::br().
     
        Form::label('confirm_pass','确认密码')." ".Form::password('confirm_pass').Form::br().
     
        Form::br().Form::submit('确定')
    }}
    {{ Form::close() }}
     
     
    @endsection

    下面也类似的是login.blade.php页面的内容

    @extends('home.master')
     
    <h1>登录页面</h1>
    @section('content')
     
    {{  Form::macro('br', function(){
                return '<br/>';
        })
    }}
     
    {{ Form::open(array('action' => 'HomeController@login', 'method'=>'post')) }}
    {{ 
        Form::label('email','邮箱')." ".Form::text('email').Form::br().
        Form::label('password','密码')." ".Form::password('password').
     
        Form::submit('登录')
     
     
    }}
    {{ Form::close() }}
    @endsection

    然后提交后,根据路由规则,就来到HomeController控制器的 register() 方法和 login() 方法来处理

    <?php
     
    class HomeController extends BaseController {
     
    public function  index()
    {
        $page = Input::get('page',1); 
        $perPage = 5;
     
        $offset = ($page*$perPage)-$perPage;
        $all= User::all()->toArray();
        $vars['users'] = User::skip($offset)->take($perPage)->get();
        $vars['paginate'] = Paginator::make($all, count($all) , $perPage);
        return View::make('home.index', $vars);
    }
     
     
    public function  register()
    {
        $user = new User();
        $user->fill( Input::all());
        $user->password = Hash::make($user->password);
        $user = User::create($user->toArray());
        if($user->id)
        {
                if(Auth::loginUsingId($user->id))
                {
                    echo "Login success";
                }
                return Redirect::intended('/');
            
        }
     
    }    
     
    public function login()
    {
        $email = Input::get('email');
        $password = Input::get('password');
        if (Auth::attempt(array('email' => $email, 'password' => $password)))
        {
            return Redirect::intended('/');
        }
        else
        {
            return 'Login failed!'.Link_to('home/login');
        }
    }
     
    }

    这三个方法有点复杂,以后在写。

  • 相关阅读:
    生产者消费者问题 一个生产者 两个消费者 4个缓冲区 生产10个产品
    三个线程交替数数 数到100
    c++ 字符串去重
    Java中一个方法只被一个线程调用一次
    GEF开发eclipse插件,多页编辑器实现delete功能
    python-arp 被动信息收集
    ssrf
    TCP
    xxe
    越权
  • 原文地址:https://www.cnblogs.com/grkin/p/3877604.html
Copyright © 2020-2023  润新知