如何将前端和后端的CodeIgniter和Ion Auth配置到不同的域中



我正在对旧的CodeIgniter应用程序进行现代化改造。通过在前端和后端分离应用程序。

新的前端是一个有角度的SPA应用程序。后端仍然使用of CI应用程序。CI使用Ion_Auth对用户进行授权。

如果两者都在同一个域中,则一切都正常,例如localhost

问题是,每个部分都必须在不同的url域上,即:

  • 前端-本地主机:8081,将来会是example.com
  • 后端-localhost:8082,将来将是api.example.com

Ion Auth可以通过这种方式登录用户,但当我查询用户是否已登录时,它会返回false。CI不再主持会话。

我还注意到,当两者都在同一域中时,session文件夹只包含一个文件,这意味着CI可以识别会话。

当我将其设置到不同的域时,session文件夹会为每个XHR请求创建一个新文件。这意味着CI不再举行会议。

为什么会发生这种情况?我应该怎么做才能使前端和后端正确使用Ion Auth?

以下是我的CI配置:

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = BASEPATH . 'var/session/';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
$config['cookie_prefix']    = '';
$config['cookie_domain']    = '';
$config['cookie_path']      = '/';
$config['cookie_secure']    = FALSE;
$config['cookie_httponly']  = FALSE;
$config['csrf_protection'] = FALSE;
$config['csrf_token_name'] = 'csrf_test_name';
$config['csrf_cookie_name'] = 'csrf_cookie_name';
$config['csrf_expire'] = 7200;
$config['csrf_regenerate'] = TRUE;
$config['csrf_exclude_uris'] = array();

我还设置了:

header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");

这就是我提出XHR请求的方式。

$http({
url: $rootScope.API_URL + "/user/check",
method: "POST",
headers: { "Content-Type": undefined },
data: { /*...*/ }
}).then( /*...*/ )

我刚刚在https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#section_5

CCD_ 5或Fetch和CORS所揭示的最有趣的能力是使";认证的";知道HTTP cookie和HTTP身份验证信息的请求。默认情况下,在跨站点XMLHttpRequest"中;或者Fetch调用,浏览器将发送凭据。必须在CCD_ 7〃上设置一个特定标志;对象或CCD_ 8构造函数。

(特别突出显示句子中的NOT关键字(。

我换句话说。无论如何,它都不会起作用。XHR请求中必须有一个特殊标志。使用AngularJS$hhtp对象时,我必须使用withCredentials: true

$http({
url: ...
withCredentials: true
})

还需要在API响应中设置两个头:

Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: http://localhost

不幸的是,我无法将*用作Access-Control-Allow-Origin,而是必须使用正确的域。

当请求的凭据模式为"include"时,响应中的"Access-Control-Allow-Origin"标头不得为通配符"*"。

通过这种方式,我可以通过保留cookie的会话发出跨源XHR请求。

相关内容

  • 没有找到相关文章

最新更新