Codeigniter の Form Validation を Web サービスで使用するにはどうすればよいのでしょうか? REST と cURL を使用して Web サービスに接続していて、ログイン ページでフォーム検証を使用しようとしていました。ユーザー名またはパスワードのフィールドが空白の場合にエラーを返すようにすることはできますが、それを使用してパスワードが一致することを確認する方法がわかりません。私の cUrl コードは次のとおりです。
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("X-DocuSign-Authentication: $header"));
curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1);
$output = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$this->form_validation->set_rules('username', 'USERNAME', 'required|is_unique[username]');
$this->form_validation->set_rules('password', 'PASSWORD', 'required|matches[password]');
if ($this->form_validation->run() == FALSE) {
curl_close($ch);
$this->load->view('error_login');
} else {
$response = json_decode($output, true);
$accountId = $response["loginAccounts"][0]["accountId"];
$baseUrl = $response["loginAccounts"][0]["baseUrl"];
$userName = $response["loginAccounts"][0]["userName"];
curl_close($ch);
$username = $userName;
$docusignURL = $baseUrl;
$docHeader = $header;
$loggedIn = array('is_logged_in' => true);
$this->session->set_userdata('username', $username);
$this->session->set_userdata('docusignURL', $docusignURL);
$this->session->set_userdata('docHeader', $docHeader);
$this->session->set_userdata($loggedIn);
redirect('/create_envelope', 'refresh');
}
現在、「未定義のオフセット: 1」と「未定義のプロパティ: Login::$db」という 2 つのエラー通知が返されています。後者は、モデルを使用してデータベースに接続していないと想定しているためです。どんな有益なアドバイスも素晴らしいでしょう。
編集:コールバック ルートを試してみましたが、500 エラーが発生しています。これまでのコントローラーコード全体は次のとおりです。
<?php
class Login extends CI_Controller {
function index() {
$this->load->view('al_login');
}
function authenticate(){
$post = $this->input->post();
extract($post);
$integratorKey = '****-********-****-****-****-************';
$header = "<DocuSignCredentials><Username>" . $username . "</Username><Password>" . $password . "</Password><IntegratorKey>" . $integratorKey . "</IntegratorKey></DocuSignCredentials>";
$url = "https://demo.docusign.net/restapi/v2/login_information";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("X-DocuSign-Authentication: $header"));
curl_setopt($ch, CURLOPT_UNRESTRICTED_AUTH, 1);
$output = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$response = json_decode($output, true);
$accountId = $response["loginAccounts"][0]["accountId"];
$baseUrl = $response["loginAccounts"][0]["baseUrl"];
$userName = $response["loginAccounts"][0]["userName"];
curl_close($ch);
$username = $userName;
$docusignURL = $baseUrl;
$docHeader = $header;
$loggedIn = array('is_logged_in' => true);
$this->session->set_userdata('username', $username);
$this->session->set_userdata('docusignURL', $docusignURL);
$this->session->set_userdata('docHeader', $docHeader);
$this->session->set_userdata($loggedIn);
$this->form_validation->set_rules('username', 'USERNAME', 'required');
$this->form_validation->set_rules('password', 'PASSWORD', 'required|callback_password_check');
if ($this->form_validation->run() == FALSE) {
$this->load->view('al_login');
} else {
$this->load->view('/create_envelope');
}
}
function password_check($str){
// send the user name to the service
if ( $this->authenticate($str) == true ) {
return true;
} else {
// customize the message with something
$this->form_validation->set_message('password_check', 'The %s is incorrect. Please try again');
return false;
}
}
}
私は REST、cURL、および Codeigniter を初めて使用するので、私の知識が役に立ちます。お二方、今までありがとうございました。500 エラーが発生する理由を教えてください。
NEW EDIT: @Petreだから、これは私たちのWebサービスからの応答です:
Array (
[loginAccounts] => Array (
[0] => Array (
[name] => ********
[accountId] => *******
[baseUrl] => https://demo.docusign.net/restapi/v2/accounts/*******
[isDefault] => true
[userName] => **** ********
[userId] => ********-****-****-****-************
[email] => ****@******.com
[siteDescription] =>
)
)
)
そのようなものではないようです。