malezha/sentry-auth-laravel

此包已被废弃且不再维护。未建议替代包。

Laravel 的 Sentry 认证驱动程序

1.2.6 2014-11-09 11:23 UTC

This package is not auto-updated.

Last update: 2022-02-01 12:37:18 UTC


README

Build Status Dependency Status Scrutinizer Code Quality Code Coverage Latest Stable Version License

该包不再受支持。

基于 hampel/sentry-auth-laravel 进行分叉。

允许您使用 Cartalyst Sentry 的内置 Laravel 认证例程。

Laravel 内置的认证例程允许您为应用程序配置认证驱动程序,包括发送密码重置邮件等功能。

虽然 Cartalyst 的 Sentry 提供了相同的功能,但它以不同且不兼容的方式提供,因此您需要重写所有认证例程以使用 Sentry 的 API - 您不能简单地更改 Laravel 中的认证驱动程序。

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

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

Simon HampelOleg Isaev 提供。

版本

驱动程序 Laravel Sentry
1.0.* 4.0.* 2.0.*
1.1.* 4.1.* 2.0.*
1.2.* 4.2.* 2.1.*

安装

推荐通过 Composer 安装。

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

"cartalyst/sentry": "2.1.*",
"malezha/sentry-auth-laravel": "1.2.*"

运行 Composer 以更新新要求。

composer update

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

'providers' => array(
	...
	'Cartalyst\Sentry\SentryServiceProvider',
	'Malezha\Sentry\Auth\SentryAuthServiceProvider',
	'Malezha\Sentry\Hashing\SentryHashServiceProvider',

),

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

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

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

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

'aliases' => array(
	...
	'Sentry'            => 'Cartalyst\Sentry\Facades\Laravel\Sentry'
),

运行包迁移

php artisan migrate --package=cartalyst/sentry
php artisan migrate --package=malezha/sentry-auth-laravel

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

php artisan config:publish cartalyst/sentry

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

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

'driver' => 'sentry',

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

我们的 SentryUser 模型扩展了 Sentry 的用户模型,但也实现了一些 Laravel Auth 库所需的额外接口。如果您已扩展我们的 SentryUser 模型,您应在 Laravel 的 auth.php 配置文件和 Sentry 的 config.php 文件中指定您自己的模型名称。

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

use Malezha\Sentry\Auth\SentryUser;

class User extends SentryUser
{

	/**
	* The attributes excluded from the model's JSON form.
	*
	* @var array
	*/
	protected $hidden = array(
		'password',
		'reset_password_code',
		'activation_code',
		'persist_code',
		'remember_token',
	);

}

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

'model' => 'User',

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

'users' => array(
	'model' => 'User',
),

使用方法

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

您可以使用提供的 SentryUser 模型来替换 Sentry 提供的用户模型,或者实现一个扩展我们提供的模型的自定义模型。

由于在 Sentry 中用作用户名的字段可以进行配置,当向 Auth::attempt 发送用户数据时,您应该使用配置值而不是在您的代码中硬编码值。有两种方式来获取这个值

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

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

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

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

$loginfield = \Malezha\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
}

许可证

该软件包是开源软件,受 MIT 许可证 许可。