ahsankhatri / wordpress-auth-provider
一个为 Laravel 认证系统提供 WordPress 用户的软件包。
Requires
- php: ^7.1
- hautelook/phpass: >=0.3
- laravel/framework: ^5.6|^6.0|^7.0|^8.0
README
安装
要安装此软件包,您需要
- 至少 Laravel 5.6 (用于旧版本的 Laravel)
- PHP 7.1(或根据您的 Laravel 版本而定)
使用 composer 安装此软件包是最佳方式。运行
composer require ahsankhatri/wordpress-auth-provider
或者将其添加到 composer.json
中然后运行 composer update
"require": {
"ahsankhatri/wordpress-auth-provider": "^2.0",
}
设置
一旦您通过 composer 安装了此软件包,请确保按照以下步骤进行配置。
注册认证保护器。
config/auth.php
'guards' => [ ..., 'wordpress' => [ 'driver' => 'session', 'provider' => 'wordpress', ],
'providers' => [ ..., 'wordpress' => [ 'driver' => 'eloquent.wordpress', 'model' => MrShan0\WordpressAuth\Models\WordpressUser::class, ],
'passwords' => [ ..., 'wordpress' => [ 'provider' => 'wordpress', 'table' => 'password_resets', 'expire' => 60, ],
发布配置文件(可选)
php artisan vendor:publish --provider="MrShan0\WordpressAuth\WordpressAuthServiceProvider"
它将发布配置文件(config/wordpress-auth.php
),您可以在其中定义自己的连接类型,例如 wp-mysql
。如果您在 WordPress 表中使用前缀,请确保在 config/database.php
中填写 prefix
以用于 wp_
前缀。
例如
'wp-mysql' => [ 'driver' => 'mysql', 'host' => env('WP_DB_HOST', '127.0.0.1'), 'port' => env('WP_DB_PORT', '3306'), 'database' => env('WP_DB_DATABASE', 'forge'), 'username' => env('WP_DB_USERNAME', 'forge'), 'password' => env('WP_DB_PASSWORD', ''), 'unix_socket' => env('WP_DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => 'wp_', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, ],
如果使用 Laravel v7,请添加以下选项(可选)
// ... 'url' => env('DATABASE_URL'), 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [],
配置
password_resets
表(来自 Laravel 默认认证机制)需要存储重置密码令牌。如果您没有 password_resets
表,则使用此迁移代替
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePasswordResetsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('password_resets', function (Blueprint $table) {
$table->string('email')->index();
$table->string('token');
$table->timestamp('created_at')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('password_resets');
}
}
扩展
或者,如果您想使用自定义用户模型,则应该让它扩展 MrShan0\WordpressAuth\Models\WordpressUser
,并在 config/auth.php
中的 providers
-> wordpress
-> model
下指定您的模型名称。
定制
如果您已重命名 WordPress 数据库中的 user_email
列,则需要首先发布此软件包的配置(如果您尚未这样做),如上所述扩展模型,并确保您已在 $fillable
属性和用于认证脚手架和发送通知的 config/wordpress-auth.php
配置文件中覆盖了您的更改。
用法
您需要显式定义 wordpress
保护器 以加载驱动程序。
示例
Auth::guard('wordpress')->loginUsingId(5); // or login using email and password Auth::guard('wordpress')->attempt([ 'user_email' => 'demo@example.com', 'user_pass' => 'quickbrownfox' ]); // get user object Auth::guard('wordpress')->user(); // Update wordpress compatible password $user->user_pass = app('wordpress-auth')->make('new_password'); $user->save(); // logout Auth::guard('wordpress')->logout();
您也可以更改 config/auth.php
中的默认保护器,那么您的代码将如下所示
Auth::loginUsingId(5);
如果您没有设置默认保护器并且想要利用 Laravel 中的 密码重置(认证脚手架),您可能需要在 Auth/ForgotPasswordController.php
和 Auth/ResetPasswordController.php
中显式定义 guard
和 broker
,如下所示
/** * Get the broker to be used during password reset. * * @return \Illuminate\Contracts\Auth\PasswordBroker */ public function broker() { return \Password::broker('wordpress'); } /** * Get the guard to be used during password reset. * * @return \Illuminate\Contracts\Auth\StatefulGuard */ protected function guard() { return \Auth::guard('wordpress'); }
变更日志
鸣谢
感谢 Laravel 的社区。
版权和许可
版权(c)2016 Ahsaan Muhammad Yousuf,MIT 许可证