使用自定义路由的Laravel 5.2身份验证

时间:2016-05-18 21:00:17

标签: php laravel authentication laravel-5.2 laravel-routing

我正在使用Laravel 5.2进行Web项目

我的用例非常简单: 在呈现任何页面之前,请验证用户是否已通过身份验证。如果没有,请提供带有自定义身份验证的登录表单(不是Eloquent的默认内容)

在阅读了这个场景后,我有:

// routes.php
Route::get('/', 'HomeController@index');

然后,如果我希望我的所有页面都受到保护,我需要控制器构造函数中的中间件 auth 。如果我想在提供任何页面之前请求登录用户,我的所有控制器都应遵循相同的模式。

// app/Http/Controllers/HomeController.php
<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;

class HomeController extends Controller
{
  public function __construct()
  {
      $this->middleware('auth');
  }

  public function index()
  {
      return view('home');
  }
}

到目前为止,这么好。如果我在'/'访问我的应用程序,我会被重定向到/登录页面。

我创建了登录页面:

// views/auth/login.blade.php
@extends('layouts.app')

@section('content')
    <form class="form-signin" method="post" action="{{ url ('/login') }}">
        {!! csrf_field() !!}
        <h2 class="form-signin-heading">Please sign in</h2>
        <label for="inputUsername" class="sr-only">Username</label>
        <input type="text" id="inputUsername" class="form-control" placeholder="Username" name="username" required autofocus>
        <label for="inputPassword" class="sr-only">Password</label>
        <input type="password" id="inputPassword" class="form-control" placeholder="Password" name="password" required>        
        <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
    </form>

@endsection

请注意重定向到/ login的表单的操作。 然后我通过提供以下新路由来更新routes.php:

// Authentication Routes...
Route::get('login', 'Auth\AuthController@showLoginForm');
Route::post('login', 'Auth\AuthController@login');
Route::get('logout', 'Auth\AuthController@logout');

Route::get('/', 'HomeController@index');

使用这些新路由,我正在捕获登录/注销方案并分配AuthController的方法来处理它们。

在已经实现的AuthController上,我想我需要定义这些方法。

我无法使其工作,或者我可能以错误的方式进行此自定义身份验证。

我有:

// app/Http/Auth/AuthController.php
<?php

namespace App\Http\Controllers\Auth;

use App\User;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;

class AuthController extends Controller
{
    use AuthenticatesAndRegistersUsers, ThrottlesLogins;
    protected $redirectTo = '/';

    public function __construct()
    {
        $this->middleware($this->guestMiddleware(), ['except' => 'logout']);
    }

    // ... lot of default stuff ..

    protected function login($data)
    {
        //
        // do custom login authentication with $data
        // ie: validate thru a web service or something
        //

        return redirect()->intended('/');
    }
}

有关如何实施此建议的任何建议?

2 个答案:

答案 0 :(得分:1)

将您的登录功能更改为

protected function login(Request $data)
{
    //
    // do custom login authentication with $data
    // ie: validate thru a web service or something
    //

    return redirect()->intended('/');
}

这将覆盖Laravel Auth最初使用的Illuminate\Foundation\Auth\AuthenticatesUsers中的函数

答案 1 :(得分:0)

感谢所有回复此问题的人。我结束了自定义集成,用户在Eloquent的用户模型和我的外部服务上复制了用户。

不幸的是,缺乏关于Laravel 5.2和自定义身份验证方法的文档使得它成为补丁解决方案,直到出现更稳定的东西。

谢谢你,编码愉快!