我已经开始使用codeigniter在PHP中开发一个旧的应用程序。之前的开发人员已经不在公司了,我一个人去弄清楚发生了什么。
首先,代码似乎在第一个"开发"中按预期工作。,但在"测试"上引发错误。服务器。代码是相同的,服务器应该配置相同(我仍然没有我需要检查的所有许可)。总之,逻辑如下:
有一个登录页面,它要求通常的凭据。它们通过POST发送到后台控制器,然后他向身份验证API发送请求,如果一切正常,该API将返回令牌。然后将令牌写入服务器,在首页中恢复,并将用户重定向到主页。最后一次重定向是通过"授权"完成的:
以下是通过Postman获得的屏幕:
从前端到Authentication::login的第一个调用:[![第一次从前台调用到authentication::login][1]][1]
令牌然后被正确地恢复,并显然存储在服务器端:
验证控制器
public function login(){
[...]
$make_call = $this->callAPI('POST', $this->config->items('apiurl') . 'token/', $data_array, ^this->config->items('apibearer'), $this->config->item('proxy'));
$response = json_èdecode($make_call, true);
if(isset($response['error'])){
exit(json_encode(array('error'=>true, 'error_id'=>$response['error'])));
}
//parse token in JWT
$token = $this->auc9_config->getParser()->parse((string) $response['id_token']);
$token = $thi->writeToken($userId, $token);
exit(json_encode(array('error' => false, 'token' => $tken->__toString())));
}
}
public function writeToken($userId, $token){
$role = $token->claims()->get('functional_post');
$eds = $role['structure_element_id'];
if(!is_null($eds)){
$builder = $this->company_config->createBuilder();
$new_token = $builder->issuedAt(new DateTimeImmutable())
->expriresAt((new DateTimeImmutable())->add(new DateInterval('PT' . (3600 * 4) . 'S')))
->withClaim('id_cr', $token->claims()->get('structure_id'))
->withClaim('eds', $eds)
->withClaim('uuid_tablet','web_demo')
->withClaim('version_apk', 'web_demo')
->getToken($this->company_config(getSigner(), $this->company_config->getSigningKey());
return $new_token;
} else {
die(json_encode(array('error'=>true, 'error_id'=>'invalid_user')));
}
}
JS端,url被重写,令牌在报头中发送:
index.js
if(data.token){
const url = window.location.pathname.replace(/authentication/?/, '');
$.ajax({
type : 'GET',
url,
headers: {
'autorization': 'Bearer ' + data.token
},
success : function(data){
window.location.reload();
},
error : function(err) {
$(form).find('.erros').append('<p>invalid token</p>')
}
});
}
最后,通过最后一次ajax调用调用主页,如果令牌正常工作,则加载页面:
家庭控制器
public function index(){
$home_page = $this->home_page->fetch_activated();
if(home_page === null){
show_404();
}else{
//display content
[...]
}
}
<<p>家模型/strong>class HomePage extends MY_Model {
[...]
public function fetch_activated() {
$result = $this->read(array('active IS NOT NULL' => null, 'active >' => 0));
return count($result) === 1 ? $result[0] : null;
}
}
**错误:**在开发服务器中,用户被正确地重定向到主页在测试服务器中,用户根植于404页面
如果没有ssh访问服务器,我就不能通过VIM执行exit()命令并观察结果,也不能访问任何日志文件。你知道我该怎么做吗?
Edit1:将图像转换为代码
Edit2: add Home Model
正如@nitrin0所说,数据库有问题。一旦我获得了访问它的凭据,排除问题就很容易了。