hampel / sentry-auth-laravel

此包已被放弃且不再维护。作者建议使用 malezha/sentry-auth-laravel 包。

Laravel Sentry Auth 驱动程序

1.1.1 2013-12-14 11:39 UTC

This package is auto-updated.

Last update: 2022-02-01 12:27:30 UTC


README

注意 此包不再维护。我们建议您切换到使用 Oleg Isaev 的替代版本 malezha/sentry-auth-laravel

关于

允许您使用 Cartalyst Sentry 内置的 Laravel Auth 程序。

Laravel 内置的 Auth 程序允许您为应用程序配置身份验证驱动程序,包括发送密码重置电子邮件等功能。

虽然 Cartalyst 的 Sentry 提供了相同的功能,但以不同的不兼容方式实现,因此您需要重写所有 Auth 程序以使用 Sentry 的 API - 您不能只是更改 Laravel 中的 Auth 驱动程序。

此包允许您做到这一点 - 安装 Sentry,安装此驱动程序,然后您可以配置内置的 Auth 驱动程序以使用 "sentry" 进行身份验证。您仍然需要扩展功能以实现 Sentry 的高级功能,例如组、权限、登录限制等 - 但至少您不需要完全重写默认的 Auth 提供程序。

理想情况下,Cartalyst 应该将此包装器功能作为其自己的 Sentry 包的一部分提供,但在此之前,希望此包对某些人来说是有用的。

Simon Hampel 提供。

安装

推荐的安装方式是通过 Composer

在您的 composer.json 中通过 Composer 需求此包。

:::json
{
    "require": {
    	"cartalyst/sentry": "2.0.*",
        "hampel/sentry-auth-laravel": "1.1.*"
    }
}

运行 Composer 更新新需求。

:::bash
$ composer update

打开您的 Laravel 配置文件 app/config/app.php 并将两个服务提供者添加到 providers 数组中

:::php
'providers' => array(

    ...

	'Cartalyst\Sentry\SentryServiceProvider',
	'Hampel\Sentry\Auth\SentryAuthServiceProvider',
	'Hampel\Sentry\Hashing\SentryHashServiceProvider',

),

SentryAuthServiceProvider 是 Auth 服务扩展到新的 "sentry" 用户提供者的地方。

SentryHashServiceProvider 提供了一个名为 "sentry-hash" 的新服务,该服务为 Sentry 哈希程序提供简单的包装器。

此包还提供了一种基于 Eloquent 的用户模型,称为 SentryUser,它扩展了 Sentry 提供的默认 Eloquent 用户模型,并实现了几个默认 Sentry 模型中缺少的所需接口。

请确保您已将 Sentry 类别名添加到 app/config/app.php

:::php
'aliases' => array(

	...

	'Sentry' => 'Cartalyst\Sentry\Facades\Laravel\Sentry',
),

如果您尚未这样做,请发布您的 Sentry 配置文件

:::bash
$ php artisan config:publish cartalyst/sentry

... 您应在 app/config/packages/cartalyst/sentry 中找到配置文件

打开您的 Laravel 配置文件 app/config/auth.php 并将驱动程序设置为 sentry

:::php
'driver' => 'sentry',

同样在文件 app/config/auth.php 中,将模型设置为 Hampel\Sentry\Auth\SentryUser

:::php
'model' => 'Hampel\Sentry\Auth\SentryUser',

在您的 Sentry 配置文件 app/config/packages/cartalyst/sentry/config.php 中,保留驱动程序为 eloquent

:::php
'driver' => 'eloquent',

您选择哪个哈希器用于 Sentry 都无关紧要,我们的驱动程序将简单地使用相同的哈希器替换 Laravel 内置的哈希器。

仍然在 Sentry 配置文件中,将用户模型更改为 Hampel\Sentry\Auth\SentryUser

:::php
'users' => array(
	'model' => 'Hampel\Sentry\Auth\SentryUser',
),

重要 - 如果您选择扩展用户模型以添加您自己的附加功能或更改默认连接名称或表名称,请确保您扩展 Hampel\Sentry\Auth\SentryUser 而不是 Cartalyst\Sentry\Users\Eloquent\User。我们的 SentryUser 模型扩展了 Sentry 的 User 模型,同时也实现了 Laravel Auth 库所需的某些附加接口。

如果您已扩展我们的 SentryUser 模型,您应在 Laravel auth.php 配置文件和 Sentry config.php 文件中指定您自己的模型名称。

例如,在 app/models/MyUser.php 中创建一个新的模型

:::php
use Hampel\Sentry\Auth\SentryUser;

class MyUser extends SentryUser
{

	// add custom functions, change default database connection, etc

}

然后,您需要修改 app/config/auth.php 文件,将模型设置为 MyUser

:::php
'model' => 'MyUser',

同时,将 app/config/packages/cartalyst/sentry/config.php 文件中的用户模型也设置为 MyUser

:::php
'users' => array(
	'model' => 'MyUser',
),

用法

按照 https://laravel.net.cn/docs/security 中的说明,像平常一样实现 Laravel 应用的用户认证。

您可以使用提供的 Hampel\Sentry\Auth\SentryUser 模型来替换 Sentry 提供的用户模型,或者实现自己的模型,该模型扩展了我们提供的模型。

由于用于 Sentry 中的用户名的字段可以进行配置,因此当向 Auth::attempt 发送用户数据时,您应该使用配置值而不是在代码中硬编码值。有两种方法可以检索此值

:::php
$loginfield = \Hampel\Sentry\Auth\SentryUser::getLoginAttributeName();

或者,您可以直接检查配置值(确保您在运行时没有动态更改登录属性名称!)

:::php
$loginfield = Config::get('cartalyst/sentry::users.login_attribute');

然后您可以在控制器(或其他地方)中使用此值进行验证和认证

:::php
$loginfield = \Hampel\Sentry\Auth\SentryUser::getLoginAttributeName();
$passwordfield = 'password';

$credentials = array(
	$loginfield => Input::get('email'),
	$passwordfield => Input::get('password')
);

if (Auth::attempt($credentials))
{
	// successfully logged in
}
else
{
	// authentication failed
}

待办事项

  • 需要进行一些单元测试