我已将所有流量重新路由到我的主域名,请说www.example.com
,我的第一页是www.example.com/login
,因此子域中的所有条目都将重定向到主域,因此something.example.com/login
将结束与www.example.com/login在同一页面上(但子域名将保留在网址中)。我这样做的原因是我有多个'客户'和'用户'每个用户负责一个或多个客户端,并且它全部设置在数据库中并且工作正常,因此我可以使用user1登录我将看到user1的一些任务在client1上,当我使用user2登录时,我将在client2等上看到来自user2的任务......
现在我需要再做一件事让它看起来好一点,当有人打开example.com并使用user1凭据登录时,我希望他被重定向到client1.example.com,同时当有人打开时client1.example.com我希望他看到该客户的徽标。
处理了所有数据库查询和其他登录问题,但我遇到了几个问题:
还有一个问题,但我认为当我能解决其他问题时,它将解决当用户管理多个客户端时,我想让他能够切换客户端,例如user1有一个菜单切换到client1或者client2,但我做的任何重定向都是将用户注销。如何使用此功能维护会话?
ps当不同的用户登录(主题)颜色时,根据客户端从数据库调用应用程序的徽标,这就是为什么我需要在第一页上读取子域以便我可以更改{{1}根据子域
这是我的一段代码,看看如果有人有兴趣我将如何实现这一目标
login logo
所以我想在这里的某个地方$currentUrl = $request->getHttpHost();
$baseUrl = $this->container->getParameter('base_url');
$subdomain = str_replace('.'.$baseUrl, '',$currentUrl);
if (sizeof($user->getClients()) > 0) {
$filter = $this->em->getFilters()->enable(Utils::CLIENT_FILTER_NAME);
if ($user->getLastLoggedInClient() !== null) {
$client = $user->getLastLoggedInClient();
} else {
$client = $user->getClients()->first();
}
if ($client == null) {
throw new ClientNotFoundException();
}
if(!$client->isActive()){
throw new ClientNotActiveException();
}
$this->session->set(Utils::CLIENT_ID_NAME, $client->getId());
$this->session->set('client', $client);
$filter->setParameter(Utils::CLIENT_ID_NAME, $client->getId());
$user->setLastLoggedInClient($client);
$this->em->persist($user);
$this->em->flush();
}
else{
return new RedirectResponse('/logout');
}
return new RedirectResponse('/');
我需要重定向到正确的子域。
谢谢!
答案 0 :(得分:1)
当您第一次意识到用户需要登录时(来自client1.example.com),请将URL或“client1”客户端名称放入会话中,可在www.example.com上阅读 - 或将其添加到网址(如https://www.example.com/login/to/client1
- 路线为'/login/to/{clientname}'
),或更简单/login?clientname=client1
。
当用户已登录并被验证为“client1”的成员时,重定向将是'client_app_dashboard', ['clientname' => 'client1']
之类的路由 - 并且路由定义为@Route("/", name="client_app_dashboard", host="{clientname}.example.com")
Symfony文档提供有关How to Match a Route Based on the Host的信息。
至于徽标 - 将根据www上的$clientname
获取和显示。主页。