我正在开发一个离子项目来创建android和ios应用程序。 我是离子新手,需要帮助了解如何通过托管在我服务器上的宁静服务进行登录。
restful会针对每个POST
或PUT
请求使用此身份验证:
username: admin
pass: 123123
所以我正在测试POST
请求。我不知道如何进行身份验证。
服务器端已设置并正在运行。并且api已经过测试,没有错误。 (使用可可休息客户测试)
确定。这是我的app.js
angular.module('tapp', ['ionic'])
.config(function($stateProvider, $urlRouterProvider){
$stateProvider
.state('testapp', {
url: "/tapp",
abstract: true,
templateUrl: "template/menu.html",
controller: 'MenuCtrl'
})
.state('tapp.home', {
url: '/home',
views: {
'tappMenu': {
templateUrl: 'template/home.html',
controller: 'HomeCtrl'
}
}
})
.state('tapp.dash', {
url: '/dash',
views: {
'tappMenu': {
templateUrl: 'template/dash.html',
controller: 'DashCtrl'
}
}
})
$urlRouterProvider.otherwise('/tapp/home');
这是我的控制器:
.controller('HomeCtrl', function($scope, $http){
$scope.formData = [] // just testing post data
$scope.submit = function(){
var data = $scope.formData.push($scope.inputData);
$http.post('http://localhost/tapp-server/posted', data);
};
}
我的php函数(使用codeigniter rest server)
public function posted_post()
{
$this->response(json_encode($_POST), 200);
}
这里的问题是,我不知道如何在应用程序将数据发布到php时应用基本的restful身份验证,因为无论何时发布数据,我都会收到错误,因为"未授权"。
对于其他数据,例如使用GET
获取数据,我会收到数据并进行完美处理。只有在POST
部分我才会感到困惑。
答案 0 :(得分:0)
选中此http://vitalflux.com/angularjs-post-data-using-ajax-spring-mvc-example/,它可能会帮助您发送帖子而不是选项。 否则,请附上您从服务器获得的响应,以便我们为您提供更多帮助
答案 1 :(得分:0)
是肯定的。我知道了。 $http
是一个低级别请求。对于高级别请求,我可以使用$resource
。
在角文档中找到了一些东西。
https://docs.angularjs.org/api/ngResource/service/ $资源
也可以使用它:
答案 2 :(得分:0)
此外,请在服务器端验证,因为在localhost上工作的API代码在生产服务器中的行为会有所不同,具体取决于服务器类型和身份验证模式。
如果您遇到问题,则应更改.htaccess,如下所示:
在您当前的.htaccess文件中添加 SetEnvIf授权“(。*)”HTTP_AUTHORIZATION = $ 1 :
<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine on
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
#RewriteRule ^(.*)$ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
#RewriteRule ^(.*)$ - [E=REMOTE_USER:%{HTTP:Authorization},L]
#RewriteCond %{HTTP:Authorization} ^(.*)
#RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteRule ^([a-z0-9_-]+)\.html$ index.php/page/$1 [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|asset|robots\.txt)
RewriteRule ^(.*)$ ./index.php?/$1 [L,QSA]
</IfModule>
如果仍有问题,请更改库\ REST_Controller.php的代码
在您的代码中找到它:
elseif ($this->input->server('HTTP_AUTHENTICATION'))
{
if (strpos(strtolower($this->input->server('HTTP_AUTHENTICATION')), 'basic') === 0)
{
list($username, $password) = explode(':', base64_decode(substr($this->input->server('HTTP_AUTHORIZATION'), 6)));
}
}
并替换为:
elseif ( $this->input->server('HTTP_AUTHENTICATION') || $this->input->server('REDIRECT_REMOTE_USER') || $this->input->server('REDIRECT_HTTP_AUTHORIZATION') )
{
$HTTP_SERVER_AUTH = ($this->input->server('HTTP_AUTHENTICATION')) ? $this->input->server('HTTP_AUTHENTICATION') : $this->input->server('REDIRECT_HTTP_AUTHORIZATION');
if(!$HTTP_SERVER_AUTH)
{
$HTTP_SERVER_AUTH = $this->input->server('REDIRECT_REMOTE_USER');
}
if (strpos(strtolower($HTTP_SERVER_AUTH),'basic') === 0)
{
list($username,$password) = explode(':',base64_decode(substr($HTTP_SERVER_AUTH, 6)));
}
}