我花了一整天的时间试图找出这个问题.在这里发布这个问题是我最后的希望.我希望有人能帮助我继续完成我的第一份工作.
因此,当直接将数据从我的视图传递到RestServer时,POST工作正常.但是,RESTServer API无法找到从RestClient发送的POST数据.
以下是片段:
RestClient API:
$ver = 'v1';
$config = array('server' => base_url()."v1",
'api_key' => 'xxxxxx',
'api_name' => 'X-API-KEY',
'http_user' => 'admin',
'http_pass' => 'xxxxx',
'http_auth' => 'basic',
);
$this->rest->initialize($config);
$this->rest->format('application/json');
$param = array(
'id' => $this->input->post('id'), // works fine here
'name' => $this->input->post('name')
);
$user = $this->rest->post('employer/postNewProject', $param, 'json');
//if (isset($user->errors)) show_404('admin');
$this->rest->debug();
Run Code Online (Sandbox Code Playgroud)
RestServer API
class Employer extends REST_Controller
{
public function __construct()
{
parent::__construct();
$this->lang->load("application");
$this->load->library("users/auth");
Datamapper::add_model_path( array( APPPATH."modules" ) );
}
public function postNewProject_post()
{
// …Run Code Online (Sandbox Code Playgroud) php codeigniter rest-client codeigniter-2 codeigniter-restserver
backbone.js当我尝试将模型保存到位于另一个主机/ URL上的restful Web服务时,我的应用程序抛出了HTTP OPTIONS not found错误.
根据我的研究,我从这篇文章中收集到:
请求将不断发送OPTIONS http请求标头,并且根本不会触发POST请求.
显然CORS的请求将"对用户数据产生副作用"将使您的浏览器"预检"带有OPTIONS请求标头的请求以检查批准,然后再实际发送您的预期HTTP请求方法.
我试图绕过这个:
Backbone.emulateHTTP = true;
我还允许在标题中允许所有CORS和CSRF选项.
header('Access-Control-Allow-Origin:*');
header("Access-Control-Allow-Headers:Origin,X-Requested-With,Content-Type,Accept"); header("Access-Control-Allow-Methods:GET,POST,OPTIONS");
当Backbone.emulateHTTP引入代码行时,应用程序崩溃了.
有没有办法在CodeIgniter RESTServer中响应OPTIONS请求,是否还有其他选择允许从谈话地点禁用此请求?
rest codeigniter backbone.js http-options-method codeigniter-restserver
我正在使用Ionic在Codeigniter/Ion_Auth/codeigniter-restclient之上构建一个登录系统,当我尝试从"离子服务器"登录时,登录工作,但对logged_in()方法的下一个api请求返回false.
当我将浏览器指向www文件夹时,同样的事情正常.
所以这是一步一步的问题:
运行离子服务
你看到登录表单(http:// localhost:8100 /#/ app/login)
输入电子邮件并通过
其余的api返回"登录成功"
$ state.go('app.profile')工作并重定向到http:// localhost:8100 /#/ app/profile
REST get api/logged_in返回false,然后重定向到登录页面
如果我在常规浏览器中执行相同操作,则步骤1变为:打开浏览器并转到http:// localhost:8888/App/www /#/ app/login,在步骤6 REST get api/logged_in返回true并且我不要没有重定向到登录页面,我留在个人资料页面.
代码是一样的.所以我的猜测是,ion_auth可能无法获得它想要的cookie或会话被重置.我不确定这个问题是什么.这是我的第一个Ionic/App项目,所以我可能会错过一些使用在浏览器中运行的代码从移动应用程序进行身份验证的正确方法
谢谢
更新:似乎在使用"离子服务器"窗口时,对API的每个请求都会触发一个新会话.新会话存储在数据库中,ion_auth针对最后一个会话测试logged_in,其中不包含登录详细信息.
我正在尝试codeigniter使用Phil Sturgeon的休息服务器构建restful API
问题是我无法弄清楚如何进行基于令牌的身份验证.我正在为移动应用程序构建该API,它是通过HTTPS构建的.首先,用户将通过登录进行身份验证,然后他将能够使用应用程序功能.我想以这里解释的方式实现:基于令牌的身份验证如何工作
问题:
如果我在请求中向服务器发送令牌,我应该在哪里检查有效性?
休息服务器库是否支持基于令牌的验证?
如果它确实需要做哪些配置?或者我需要实现我的身份验证方法?
或者有更好/更简单的身份验证方式而不是基于令牌?
我在codeigniter中使用REST服务器,使用方法是在我的应用程序中所有控制器中我必须在开始时写这行:
require APPPATH . '/libraries/REST_Controller.php';
Run Code Online (Sandbox Code Playgroud)
有谁知道如何自动加载这个REST_Controller并避免在我的所有控制器中使用这一行?我不想使用require.
预先感谢
当我的客户端应用程序和api在localhost中时,agularJs控制器中的http.get请求正常工作.当api移动到服务器时,出现了问题.
客户端使用angularJs
$http.get('http://domain.com/api/spots/2/0').success(function(datas){
console.log(datas);
});
Run Code Online (Sandbox Code Playgroud)
log give:跨源请求被阻止:同源策略不允许在http://domain.com/api/spots/2/0上读取远程资源.这可以通过将资源移动到同一域或启用CORS来解决.
我已将这两行添加到我的控制器构造中
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET");
Run Code Online (Sandbox Code Playgroud)
还是一样的错误.
我正在使用Phil Sturgeon的REST服务器,CI3和POSTMAN进行调试.我发送了一个PUT以下信息,但是,我没有收到预期的错误消息.
这是我的form_validation.php:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
$config = array(
'student_put' => array(
array('field' => 'email_address', 'label' => 'email_address', 'rules' => 'trim|required|valid_email'),
array('field' => 'password', 'label' => 'password', 'rules' => 'trim|required|min_length[8]|max_length[16]'),
array('field' => 'first_name', 'label' => 'first_name', 'rules' => 'trim|required|max_length[50]'),
array('field' => 'last_name', 'label' => 'last_name', 'rules' => 'trim|required|max_length[50]'),
array('field' => 'phone_number', 'label' => 'phone_number', 'rules' => 'trim|required|alpha_dash'),
)
);
?>
Run Code Online (Sandbox Code Playgroud)
这是我的控制器Api.php中的方法:
function student_put(){
$this->form_validation->set_data($this->put());
// these are the rules set in config/form_validation.php
if …Run Code Online (Sandbox Code Playgroud) 我正在尝试为我的 API 实现以下 URL(我正在使用 Codeigniter 和 Phil Sturgeon 的REST 服务器库):
/players -> refers to index method in the players controller
/players/rookies -> refers to rookies method in the players controller
Run Code Online (Sandbox Code Playgroud)
我不希望 URL 带有尾随“索引”
/players/index
Run Code Online (Sandbox Code Playgroud)
当我像这样定义路由时,这根本没有问题:
$route['players'] = 'players/index';
Run Code Online (Sandbox Code Playgroud)
一切都按预期进行。
我的问题是我需要额外的 URL 段,如下所示:
/players/rookies/limit/10/offset/5/key/abcdef
Run Code Online (Sandbox Code Playgroud)
上面的示例有效,但以下示例无效:
/players/limit/10/offset/5/key/abcdef
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:显然我的控制器中{"status":false,"error":"Unknown method."}
没有方法。limit
我如何设置我的routes.php配置文件才能使这些URL正常工作?
任何帮助深表感谢!
php rest codeigniter codeigniter-routing codeigniter-restserver
codeigniter-restserver 可用于 codeigniter 2.1.0 或更高版本
( https://github.com/chriskacerguis/codeigniter-restserver )
但无法找到 codeigniter 2.0.1 的 REST API
如何在 codeigniter 2.0.1 中创建 restserver
我有一个chriskacerguis Rest服务器,它通常像API服务器那样监听客户端请求.基于客户端请求我想要仅在标头中向客户端发送/响应一些数据.
我的问题是:
我如何首先访问客户端标头?
然后
如何在Rest Server中设置Header?
这是我向REST SERVER发送请求的方式:
function request_curl($url = NULL) {
$utc = time();
$post = "id=1&CustomerId=1&amount=2450&operatorName=Jondoe&operator=12";
$header_data = array(
"Content-Type: application/json",
"Accept: application/json",
"X-API-KEY:3ecbcb4e62a00d2bc58080218a4376f24a8079e1",
"X-UTC:" . $utc,
);
$ch = curl_init();
$curlOpts = array(
CURLOPT_URL => 'http://domain.com/customapi/api/clientRequest',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => $header_data,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $post,
CURLOPT_HEADER => 1,
);
curl_setopt_array($ch, $curlOpts);
$answer = curl_exec($ch);
// If there was an error, show it
if (curl_error($ch)) {
die(curl_error($ch));
}
curl_close($ch); …Run Code Online (Sandbox Code Playgroud) 我正在为服务器应用程序使用codeigniter REST API。客户端为Angular2,在我的REST API中,我给出了基本身份验证。我已设定为
$config['rest_auth'] = 'basic';
Run Code Online (Sandbox Code Playgroud)
和
$config['rest_valid_logins'] = ['uname' => 'pwd'];
Run Code Online (Sandbox Code Playgroud)
对于CORS Check,我也使用了以下代码,
$config['check_cors'] = TRUE;
$config['allowed_cors_headers'] = [
'Origin',
'X-Requested-With',
'Content-Type',
'Accept',
'Access-Control-Request-Method'
];
$config['allowed_cors_methods'] = [
'GET',
'POST',
'OPTIONS',
'PUT',
'PATCH',
'DELETE'
];
$config['allow_any_cors_domain'] = TRUE;
Run Code Online (Sandbox Code Playgroud)
我也尝试过在我的rest控制器中尝试过,
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Content-Range, Content-Disposition, Content-Description');
Run Code Online (Sandbox Code Playgroud)
我在下面的代码中使用了角度
import { Component, OnInit } from '@angular/core';
import { Http, Headers, RequestOptions } from '@angular/http';
import { FormGroup, AbstractControl, FormBuilder, Validators } from '@angular/forms';
import …Run Code Online (Sandbox Code Playgroud) 我的前端应用程序grunt在端口上的实时服务器上运行9100,而我的PHP服务器在端口上80.主机是相同的,只是端口不同.
当我向某些数据发送POST请求时,我在预检请求上收到错误.http://dev.site.dev/api/gistJSON404OPTIONS
我已经CORS在apache配置中添加了标头:
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Headers "X-Requested-With, accept, content-type"
Header set Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"
Run Code Online (Sandbox Code Playgroud)
``并重新启动服务器但仍然遇到问题.
我应该index_option()在gist控制器中添加方法吗?或问题出在其他地方?
codeigniter ×11
php ×7
rest ×4
angularjs ×2
angular ×1
autoload ×1
backbone.js ×1
cordova ×1
cors ×1
http-post ×1
ion-auth ×1
ionic ×1
rest-client ×1