当前位置: 首页 > 知识库问答 >
问题:

Laravel跨域共享会话

姬墨竹
2023-03-14

我目前正在从事一个托管在域上的laravel项目。此应用程序的一部分(某些功能)必须位于不同的域上。我在我的网上找到了一条路。在php中,我用以下命令映射了所有路由:

Route::group(['domain' => config('app.main_domain')], function () {

以及需要以相同方式位于另一个域上,但具有不同域的路由。好啊在主域中,我创建了一个具有src属性的图像:

<img src="{{ config('second_domain') . DIRECTORY_SEPARATOR }}auth?id={{ \Illuminate\Support\Facades\Crypt::encrypt(\Illuminate\Support\Facades\Session::getId()) }}" style="display:none;"/>

指向此方法路线:

  if ($request->has('id')) {

            $session_id = Crypt::decrypt($request->get('id'));
            Session::setId($session_id);
            Session::start();
        }

它起作用了。我在不同的域上共享同一个会话,但是,我想问你们,对于这个案例场景,你们是否知道更好的方法。我知道这是谷歌使用的一种老方法。

我必须说,用户需要在不同的域中保持身份验证。我已经看过了laravel passport或laravel sanctum,但它们是用于API认证的。

任何帮助都将不胜感激。

共有1个答案

燕璞
2023-03-14

对于登录不同的域,您应该描述不同的“防护”。

例如config/auth。php

'defaults' => [
    'guard' => 'web', // or 'admin'
    'passwords' => 'users',
],
'guards' => [
    'admin' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'web' => [
        'driver' => 'session',
        'provider' => 'tourists',
    ],

    'api' => [
        'driver' => 'token',
        'provider' => 'users',
        'hash' => false,
    ],
],

我在项目中使用了两个防护装置:

>

  • 第一个是'admin',它用于管理面板,我用作提供程序User.php模型。

    第二种是“网络”,它是用于前端或公共站点,用于旅游。php模型,但也可以使用用户模型。

    您可以在管理面板的LoginController中使用特定的防护:

    protected function guard()
    {
        return Auth::guard('admin');
    }
    

    以及网站的一般域名

    protected function guard()
    {
        return Auth::guard('web');
    }
    

    最后,你问我,我如何保护我的路线,pfff,简单:

    Route::group(['middleware' => 'auth:web'], function () {
        Route::get('/', 'Cabinet\HomeController@index')->name('home');
    });
    

    或用于管理私人路线

    Route::group(['middleware' => 'auth:admin'], function () {
        Route::get('/', 'Admin\HomeController@index')->name('home');
    });
    

    了解有关身份验证的更多信息https://laravel.com/docs/7.x/authentication#adding-海关警卫

  •  类似资料:
    • 问题内容: 我正在编写一个HTML5应用程序,该应用程序使用JSONP从几个不同的来源收集数据。我对GET所做的任何事情都可以正常工作。我现在正尝试发布数据,并且遇到了一个有趣的问题。我需要将数据从我的应用程序发布到另一个应用程序,该应用程序从本地计算机运行。我正在尝试编写具有跨平台功能的移动应用程序(请考虑使用Pulse / Flipboard),因此该代码将始终从本地源运行。我的思考过程如下:

    • 跨域资源共享 (CORS) 跨域资源共享(Cross-Origin Resource Sharing)允许WEB端的应用程序访问不属于本域的资源 配置格式 CORS配置为json字符串,类似 { "rules":[ { "id":"id1" "AllowOrigin":"http://*.example.com" //指定允许发送跨源请求的源,支持使用通配符

    • 问题内容: 我对跨域JavaScript的概念有疑问。 有一个服务器(ex amazon.com),在其中只有选定的域可以使用其Web服务。所以可以肯定,如果我尝试从本地使用他们的服务,我将无法。我在控制台上得到了这个 跨域请求被阻止:“同源起源”策略禁止读取http://football20.myfantasyleague.com/2014/export?TYPE=rosters&L=52761

    • 我正在使用SpringBoot1.4开发一些Spring应用程序。1和spring boot starter与ELEAF的依赖关系。我希望在我的Web服务器上共享我的ThymileAF模板(例如页眉和页脚),以便能够将它们包含在我的应用程序中。实现这一点的最简单方法是在我的每个应用程序中包含指向我的模板的服务器根相对链接。这样,我的应用程序将是可移植的,我可以让它在我的所有环境(开发、测试、产品)

    • 本文向大家介绍js跨域资源共享 基础篇,包括了js跨域资源共享 基础篇的使用技巧和注意事项,需要的朋友参考一下 本文详细介绍了javascript跨域资源共享,供大家参考,具体内容如下 1.为什么提出跨域资源共享(CORS)?     因为XHR实现ajax的安全限制是:XHR 对象只能访问与包含它的页面位于同一个域中的资源 2.如何实现跨域?(跨浏览器) 以上就是本文的全部内容,希望对大家的学习

    • 我有两个ruby on rails应用程序,分别位于两个不同的域上(例如和)