[英]Extending Authentication in Laravel 5.1
我有一个应用程序,类似于托管转售商得到的东西有所不同...该应用程序用于domainA.com和domainB.com。 两个域都指向一台服务器,因此两个站点都运行完全相同的文件和数据库的单个应用程序。
当用户访问domainA.com时,我们会看到domainA的特定首选项,即徽标和配色方案。 同样适用于domainB.com。
虽然两个域都使用单个数据库,但我希望userA能够使用相同的电子邮件在domainA和domainB上注册。 当用户尝试登录时,我们将使用类似于以下内容的内容:(摘自http://laravel.com/docs/master/authentication#authenticating-users )
Auth::attempt(['email' => $email, 'password' => $password, 'site' => 'domainA.com'])
这是我需要的功能,用于保持数据分离,因此,如果您以属于domainA.com的adminA身份登录,您将看到userA在domainA.com上所做的操作,而adminA将看不到userA在domainB.com上进行的操作。 同样适用于属于domainB.com的adminB,adminB无法看到userA在domainA.com上所做的操作。
我想知道如果我要使用类似以下内容来更新默认的AuthController @ create方法,那么Laravel 5随附的整体身份验证将受到怎样的影响:
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
'site' => 'domainB.com'
]);
}
我认为密码提醒可以轻松更新,但是由于Laravel的身份验证包括很多内置功能,因此除非使用身份验证用户的标识符来标识用户并执行核心功能,否则这可能会引起问题。
更新/这是我的位置
我已经完成了以下
domains
表中查找域id。 unique_email_domain_id
( email
, domain_id
) 还创建了一个中间件来创建带有数据的全局域变量,以下是一个初始示例:
<?php
namespace App\Http\Middleware;
use Closure;
use URL;
class DomainRouter
{
/**
* Handle an incoming request. Setting up domain for given session.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$domain= \App\Domain::where('domain', URL::to('/'))->firstOrFail();
# config('domain')->id
config([
'domain' => $domain
]);
return $next($request);
}
}
必须通过重新创建代码来重新创建登录,注册和忘记密码,这些代码主要是从核心控制器复制过来的
站点应该与数据库无关,因为用户和域之间的数据库级别没有关系。
当用户访问domainA.com时,我们会看到domainA的特定首选项,即徽标和配色方案。 同样适用于domainB.com。
虽然两个域都使用单个数据库,但我希望userA能够使用相同的电子邮件在domainA和domainB上注册。
相反,您要做的就是显示不同的信息或在域之间提供不同的功能。
相反,您应该做的只是扩展auth函数/过滤器,当用户登录到特定域时,您可以先确定当前路由所在的域,然后再应用数据/视图/功能
例如:
MyController extends Controller
{
public function view(ViewRepository $view)
{
return $view->make('path.to.my.view')
}
}
}
ViewRepository扩展View的位置,并基于当前路由域覆盖发送到该视图的数据。
您可能会非常喜欢并传入任何域特定的存储库文件,该文件将基于两个域之间的更改充当任何“核心”功能的接口/过滤器。域扩展了您为维护DRY原理而开发的核心类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.