zinethq / spark-invite
此包已被废弃且不再维护。作者建议使用 centrality-labs/spark-invite 包。
Laravel Spark 用户邀请系统
v1.0.0
2017-08-31 15:48 UTC
Requires
- php: >=5.6.4
- laravel/framework: 5.*
- webpatser/laravel-uuid: 2.*
Requires (Dev)
- phpunit/phpunit: ~5.5
This package is not auto-updated.
Last update: 2022-02-01 13:04:12 UTC
README
Spark Invite 是用于用户账号可以预先填充的场景,例如通过第三方提供的信息,需要发送邀请以便潜在用户“认领”他们的账号。
例如,在一个系统中可能需要批量创建新的用户账号以确保安全性、一致性和便利性。一旦创建了一个新的用户账号,SparkInvite 包可以用来管理账号认领的过程。这些阶段包括
- 一个推荐者(可能属于多个团队中的一个)邀请新的用户账号。这被封装在
Invitation模型中。 - 触发一个
invite事件,允许 SparkInvite 包之外的代码在发出任何通信之前验证邀请。例如,自动检查电子邮件地址域名或手动验证可能需要电话通信的邀请。 - 触发一个
issued事件,允许发出接受/拒绝链接。邀请的实际发送是在 SparkInvites 包之外完成的,允许您的系统使用您首选的包/通信方式。 - 如果用户接受邀请,用户将立即被要求使用 Spark 的标准密码重置机制重置他们的密码。用户也可以拒绝邀请。
- 邀请可以过期,可以是软过期(允许恢复邀请,除非手动清理已过期的邀请)或硬过期(一旦邀请过期,就不能再使用)。
安装
-
在包中要求
composer require zinethq/spark-invite dev-master
-
编辑
config\app.php以包含... 'providers' => [ ... ZiNETHQ\SparkInvite\SparkInviteServiceProvider::class, ... ], ... 'aliases' => [ ... 'SparkInvite' => ZiNETHQ\SparkInvite\Facades\SparkInvite::class, ... ], ...
-
运行以下命令
php artisan vendor:publish --provider="ZiNETHQ\SparkInvite\SparkInviteServiceProvider"这将发布以下文件
/database/migrations/TIMESTAMP_create_user_invitations_table.php/database/migrations/TIMESTAMP_create_invitation_status_table.php/config/sparkinvite.php/app/Listeners/InvitationListener.php/app/InvitationStatus.php
-
迁移数据库
-
将以下内容添加到您的
App\Providers\EventServiceProvider类中protected $listen = [ ... 'spark.invite.*' => [ 'App\Listeners\InvitationListener', ], ... ];
错误管理
当令牌存在问题,例如不存在或已被撤销时,邀请控制器将重定向回配置设置 sparkinvites.routes.on-error 中定义的路由。当重定向用户时,将通过配置的变量名传递 sparkinvites.messages 之一到 sparkinvite.flash,这可以在您的视图中显示。例如,使用 Vue.js 和 Notify.js(以及 underscore.string/lodash 用于大写化和 sprintf 用于字符串创建)的以下组件将这样做
Vue.component('alert', { props: { message: { type: Object, required: false, default: null } }, computed: { title: function () { return sprintf('<strong>%s</strong>', _string.capitalize(this.message.type)); }, type: function () { switch (this.message.type) { case 'error': return 'danger'; case 'warning': return 'warning'; case 'success': return 'success'; case 'info': return 'info'; default: return 'danger'; } }, icon: function() { switch (this.type) { case 'danger': return 'fa fa-times-circle'; case 'warning': return 'fa fa-exclamation-triangle'; case 'success': return 'fa fa-check-circle'; case 'info': return 'fa fa-info-circle'; default: return 'fa fa-times-circle'; } } }, template: '', created: function () { this.$nextTick(function () { if (this.message) { $.notify({ icon: this.icon, title: this.title, message: this.message.content },{ type: this.type, timer: 3000, }); } }); } });
在您的视图页面上如此使用时
<alert :message="{{ json_encode(session()->get('alert'), null) }}"></alert>