【发布时间】:2015-09-23 13:18:35
【问题描述】:
我有一个应用程序,类似于托管经销商得到的不同的东西......这个应用程序用于 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 在域名B.com。同样适用于属于 domainB.com 的 adminB,adminB 将无法看到 userA 在 domainA.com 上做了什么。
我想知道 Laravel 5 提供的整体身份验证是否会受到影响,如果我要使用类似于以下内容的方式更新默认 AuthController@create 方法:
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
'site' => 'domainB.com'
]);
}
我认为密码提醒可以轻松更新,但由于 Laravel 的身份验证包含相当多的内置功能,这可能会造成问题,除非在身份验证后使用用户标识符来识别用户并执行核心功能
更新/这是我在的地方
我已经关注了
- 为表用户中的电子邮件删除数据库中的唯一条件
- 更新了登录和注册页面以包含额外的参数“域”
- 在用户表中添加了新列“域” - 现在用户属于域
- 必须创建中间件以在初始站点访问时从
domains表中查找域 ID。 - 在 users 表中必须将 email 和 domain_id 设置为唯一以防止重复:UNIQUE INDEX
unique_email_domain_id(email,domain_id) - 注册页面上的验证需要针对函数验证器中的电子邮件进行更新,并替换为类似于 'unique:users,email,NULL,id,domain_id,1'的内容
还创建了一个中间件来创建一个带有数据的全局域变量,下面是一个初始示例:
<?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);
}
}
必须通过重新创建代码来重新创建登录、注册和忘记密码,主要是从核心控制器复制过来的
【问题讨论】:
标签: php laravel-5 laravel-5.1