risan/laravel-auth-service

Laravel 状态认证服务提供者。

v1.1.0 2016-03-09 17:34 UTC

This package is auto-updated.

Last update: 2024-09-17 20:12:41 UTC


README

Build Status HHVM Status StyleCI Scrutinizer Code Quality Code Coverage SensioLabs Insight Latest Stable Version License

为最新 Laravel 5.2 版本提供状态认证服务提供者。

Laravel 已经提供了一个方便的方法来提供用户认证功能。Laravel 框架包含 AuthenticatesUsers 特性,可以被注入到你的认证控制器中。实际上,默认提供的 AuthController 类就是使用这个便利的特性。

这个包的目的是替换你的认证控制器中的 AuthenticatesUsers 特性。通过将认证逻辑提取到一个独立的服务提供者中,你的认证控制器将会更加清晰和易于阅读。

这个包仅适用于最新 Laravel 5.2 版本,并且仅支持 StatefulGuard 实现。

目录

依赖

此包依赖于以下库

安装

包安装

要使用 Composer 安装此库,请在你 Laravel 项目目录中运行以下命令

composer require risan/laravel-auth-service

或者,你也可以将 risan/laravel-auth-service 包添加到你的 composer.json 文件中

"require": {
  "risan/laravel-auth-service": "~1.1"
}

一旦添加了依赖,运行安装命令

composer install

服务提供者注册

一旦安装了包,你需要注册包的服务提供者。打开你的 config/app.php 文件,并将 AuthService\AuthServiceProvider::class 添加到你的 providers 列表中,如下所示

'providers' => [
    ...
    AuthService\AuthServiceProvider::class,

],

外观注册

如果你想使用外观来访问此包,你需要在 aliases 指令中注册 AuthService\Facades\AuthService::class。打开你的 config/app.php 文件,并更新 aliases 指令,如下所示

'aliases' => [
    ...
    'AuthService' => AuthService\Facades\AuthService::class,

],

这样,你就可以使用 AuthService 外观来访问包的功能了。

发布配置文件

设置此包的最后一步是发布配置文件。在你的命令提示符中,运行以下 artisan 命令

php artisan vendor:publish --provider="AuthService\AuthServiceProvider"

此命令将复制默认包的配置文件到 config/authservice.php

配置

一旦发布了包的配置文件,你可以在 config\authservice.php 中找到该文件。默认配置文件看起来像这样

return [
    'auth_event_listener_class' => AuthService\AuthEventListener::class,
    'login_failed_message' => 'Credentials do not match.',
    'after_login_success_path' => 'protected',
    'after_logout_success_path' => 'login'
];
  • auth_event_listener_class

    这个配置告诉服务提供者使用哪个认证事件监听器类。默认情况下,它将使用提供的 AuthService\AuthEventListener 类。然而,你也可以用你的自定义事件监听器实现来覆盖它,只要它符合 AuthService\Contracts\AuthEventListenerInterface 合同即可。

  • login_failed_message

    当用户的凭据无效时,将使用此错误消息。默认情况下,如果登录失败,此错误消息将被闪送到会话中。

  • after_login_success_path

    如果用户成功登录,他/她将被重定向到这个路径。

  • after_logout_success_path

    如果用户从应用程序中注销,他/她将被重定向到这个路径。

可用方法

登录

要登录用户,只需调用 login() 方法

AuthService::login(array $credentials, $remember = false);

此方法将尝试登录用户,并返回一个 Illuminate\Http\RedirectResponse 实例。

登出

要注销用户,我们可以使用 logout() 方法

AuthService::logout();

此方法也将返回一个 Illuminate\Http\RedirectResponse 实例。

基本用法

以下是一个基本示例,用于执行登录和注销功能,假设我们正在使用外观模式。

use AuthService;

// Log the user in.
$credentials = ['email' => 'john@example.com', 'password' => 'secret'];
AuthService::login($credentials);

// Log the user out.
AuthService::logout();

在 AuthController 中的实现

对于完整的实现,我们将创建一个简单的认证控制器来处理登录和注销请求。

使用外观

namespace App\Http\Controllers\Auth;

use AuthService;
use App\Http\Controllers\Controller;
use App\Http\Requests\Auth\LoginRequest;

class AuthController extends Controller
{
    /**
     * Create a new authentication controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest', ['except' => 'getLogout']);
    }

    /**
     * Show the login page.
     *
     * @return Illuminate\Http\Response
     */
    public function getLogin()
    {
        return view('auth.login');
    }

    /**
     * Handle login request.
     *
     * @param  App\Http\Requests\Auth\LoginRequest $request
     * @return Illuminate\Http\Response
     */
    public function postLogin(LoginRequest $request)
    {
        $credentials = $request->only(['email', 'password']);

        return AuthService::login($credentials, $request->has('remember'));
    }

    /**
     * Log the user out.
     *
     * @return Illuminate\Http\Response
     */
    public function getLogout()
    {
        return AuthService::logout();
    }
}

不使用外观

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Http\Requests\Auth\LoginRequest;
use AuthService\Contracts\AuthServiceInterface;

class AuthController extends Controller
{
    protected $authService;

    /**
     * Create a new authentication controller instance.
     *
     * @return void
     */
    public function __construct(AuthServiceInterface $authService)
    {
        $this->middleware('guest', ['except' => 'getLogout']);

        $this->authService = $authService;
    }

    /**
     * Show the login page.
     *
     * @return Illuminate\Http\Response
     */
    public function getLogin()
    {
        return view('auth.login');
    }

    /**
     * Handle login request.
     *
     * @param  App\Http\Requests\Auth\LoginRequest $request
     * @return Illuminate\Http\Response
     */
    public function postLogin(LoginRequest $request)
    {
        $credentials = $request->only(['email', 'password']);

        return $this->authService->login($credentials, $request->has('remember'));
    }

    /**
     * Log the user out.
     *
     * @return Illuminate\Http\Response
     */
    public function getLogout()
    {
        return $this->authService->logout();
    }
}