对POST进行离子restful认证并从php获取数据

时间:2015-01-05 08:40:43

标签: rest cordova ionic-framework angularjs-http

我正在开发一个离子项目来创建android和ios应用程序。 我是离子新手,需要帮助了解如何通过托管在我服务器上的宁静服务进行登录。

restful会针对每个POSTPUT请求使用此身份验证:

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部分我才会感到困惑。

3 个答案:

答案 0 :(得分:0)

选中此http://vitalflux.com/angularjs-post-data-using-ajax-spring-mvc-example/,它可能会帮助您发送帖子而不是选项。 否则,请附上您从服务器获得的响应,以便我们为您提供更多帮助

答案 1 :(得分:0)

是肯定的。我知道了。 $http是一个低级别请求。对于高级别请求,我可以使用$resource

在角文档中找到了一些东西。

https://docs.angularjs.org/api/ngResource/service/ $资源

也可以使用它:

https://github.com/mgonto/restangular#table-of-contents

答案 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)));
                    }

                }