2015-07-03 1 views
14

Ребята, если мой вопрос непонятен, прокомментируйте ниже.Как разрешить пользователям входить в защищенный флажок-rest-api в Angularjs с использованием HTTP-аутентификации?

Базовая аутентификация HTTP для REST API в колбе + angularjs

Я просто хочу, чтобы войти в колбах-Rest-АФИ в angularjs, я не знаю, как отправить данные для входа (имя пользователя и пароль) в flask-rest-api. В этом приложении После успешного входа в систему есть одна таблица, и она будет загружать данные. Здесь мы находимся , не используя никаких данных базы данных, но имя пользователя и пароль жестко закодированные в код сервера-отдыха. и username = "admin" и password = "1234". Когда можно изменить, обновить, addNewData. Я взял это из this blog, здесь они используют в нокаут, я пытаюсь в Angularjs

Форма входа

<div id="login" class="modal hide fade" tabindex="=1" role="dialog" aria-labelledby="loginLabel" aria-hidden="true"> 
     <div class="modal-header"> 
      <h3 id="loginLabel">Sign In</h3> 
     </div> 
     <div class="modal-body"> 
      <form class="form-horizontal"> 
       <div class="control-group"> 
        <label class="control-label" for="inputUsername">Username</label> 
        <div class="controls"> 
         <input ng-model="username" type="text" id="inputUsername" placeholder="Username"> 
        </div> 
       </div> 
       <div class="control-group"> 
        <label class="control-label" for="inputPassword">Password</label> 
        <div class="controls"> 
         <input ng-model="password" type="password" id="inputPassword" placeholder="Password"> 
        </div> 
       </div> 
      </form> 
     </div> 
     <div class="modal-footer"> 
      <button ng-click="submitData(username, password)" class="btn btn-primary" data-dismiss="modal" aria-hidden="true">Sign In</button> 
     </div> 
    </div> 

HTML код, который называют Войти Модель

<div class="navbar"> 
     <div class="navbar-inner"> 
     <a class="btn" data-toggle="modal" data-target="#login">Login</a> 
     </div> 
</div> 

Код AngulurJS

<script> 

        var app = angular.module('myApp', []); 
        app.controller('tasksCtrl', function($scope, $http) { 
         $scope.submitData=function(username, password){ 
          var config={ 
           params:{ 
            username:username, password:password 
           } 
          }; 
         }; 
         //$http.get("data.json") 
         $http.get("/todo/api/v1.0/tasks") 
         .success(function(response) { 
          console.log(response.tasks) 
          $scope.tasks = response.tasks; 
         }); 

         $scope.editTask = function(task) { 
          $scope.selectedTask = task; 
         }; 
         $scope.removeRow = function(task) { 
          $scope.tasks.splice(task, 1); 
         }; 
         $scope.addNewTask = function() { 
          //$scope.tasks.push({title :$scope.task1,description: $scope.description1}); 
          $scope.tasks.push({title: $scope.task1, description: $scope.description1}); 
          $scope.task1 = ''; 
          $scope.description1 = ''; 
          // $scope.tasks.push('dhsh'); 
         }; 
        });  
     </script> 

REST-API-SERVER

import six 
from flask import Flask, jsonify, abort, request, make_response, url_for, render_template 
from flask.ext.httpauth import HTTPBasicAuth 

app = Flask(__name__, static_url_path="") 
auth = HTTPBasicAuth() 


@auth.get_password 
def get_password(username): 
    if username == 'admin': 
     return '1234' 
    return None 


@auth.error_handler 
def unauthorized(): 
    return make_response(jsonify({'error': 'Unauthorized access'}), 403) 


@app.errorhandler(400) 
def bad_request(error): 
    return make_response(jsonify({'error': 'Bad request'}), 400) 


@app.errorhandler(404) 
def not_found(error): 
    return make_response(jsonify({'error': 'Not found'}), 404) 


tasks = [ 
    { 
     'id': 1, 
     'title': u'Buy groceries', 
     'description': u'Milk, Cheese, Pizza, Fruit, Tylenol', 
     'done': False 
    }, 
    { 
     'id': 2, 
     'title': u'Learn Python', 
     'description': u'Need to find a good Python tutorial on the web', 
     'done': False 
    } 
] 


def make_public_task(task): 
    new_task = {} 
    for field in task: 
     if field == 'id': 
      new_task['uri'] = url_for('get_task', task_id=task['id'], 
             _external=True) 
     else: 
      new_task[field] = task[field] 
    return new_task 

@app.route('/') 
@auth.login_required 
def index(): 
    return render_template('index.html') 

@app.route('/todo/api/v1.0/tasks', methods=['GET']) 
@auth.login_required 
def get_tasks(): 
    return jsonify({'tasks': [make_public_task(task) for task in tasks]}) 


@app.route('/todo/api/v1.0/tasks/<int:task_id>', methods=['GET']) 
@auth.login_required 
def get_task(task_id): 
    task = [task for task in tasks if task['id'] == task_id] 
    if len(task) == 0: 
     abort(404) 
    return jsonify({'task': make_public_task(task[0])}) 


@app.route('/todo/api/v1.0/tasks', methods=['POST']) 
@auth.login_required 
def create_task(): 
    if not request.json or 'title' not in request.json: 
     abort(400) 
    task = { 
     'id': tasks[-1]['id'] + 1, 
     'title': request.json['title'], 
     'description': request.json.get('description', ""), 
     'done': False 
    } 
    tasks.append(task) 
    return jsonify({'task': make_public_task(task)}), 201 


@app.route('/todo/api/v1.0/tasks/<int:task_id>', methods=['PUT']) 
@auth.login_required 
def update_task(task_id): 
    task = [task for task in tasks if task['id'] == task_id] 
    if len(task) == 0: 
     abort(404) 
    if not request.json: 
     abort(400) 
    if 'title' in request.json and \ 
      not isinstance(request.json['title'], six.string_types): 
     abort(400) 
    if 'description' in request.json and \ 
      not isinstance(request.json['description'], six.string_types): 
     abort(400) 
    if 'done' in request.json and type(request.json['done']) is not bool: 
     abort(400) 
    task[0]['title'] = request.json.get('title', task[0]['title']) 
    task[0]['description'] = request.json.get('description', 
               task[0]['description']) 
    task[0]['done'] = request.json.get('done', task[0]['done']) 
    return jsonify({'task': make_public_task(task[0])}) 


@app.route('/todo/api/v1.0/tasks/<int:task_id>', methods=['DELETE']) 
@auth.login_required 
def delete_task(task_id): 
    task = [task for task in tasks if task['id'] == task_id] 
    if len(task) == 0: 
     abort(404) 
    tasks.remove(task[0]) 
    return jsonify({'result': True}) 


if __name__ == '__main__': 
    app.run(debug=True) 
+0

Ребята Пожалуйста, позвольте мне сейчас Если мой вопрос непонятен, я новичок в rest-api и фляже, пожалуйста, помогите по этому вопросу ... – geeks

+0

Парень, пожалуйста, оставьте несколько комментариев ... – geeks

+4

Если я правильно понимаю ваш вопрос , вы спрашиваете, как выполнять базовую проверку подлинности HTTP с помощью AngularJS (или, по крайней мере, это то, что выставляете на ваш код флаза Python). Эта ссылка будет содержать некоторую информацию, связанную с вашим вопросом. Http://jasonwatmore.com/post/2014/05/26/AngularJS-Basic-HTTP-Authentication-Example.aspx – Boris

ответ

1

Как вы сделать базовую аутентификацию из стороны клиента путем подачи Authorization: Basic <encoded username:password> заголовок в запросе HTTP.

кодируются имя пользователя: пароль осуществляется в определенной способом, описанным ниже:

  1. Имя пользователя и пароль объединяются в строку «имя пользователя: пароль»
  2. Результирующая строка затем кодируется с использованием RFC2045- MIME Base64 вариант, за исключением того, не ограничивается 76 полукокса/линии [9]

Так измените остальные вызовы включают в себя выше колонтитула в Ang ularjs или найти библиотеку для этого.

, как @Boris упоминалось в комментариях выше, эту ссылка http://jasonwatmore.com/post/2014/05/26/AngularJS-Basic-HTTP-Authentication-Example.aspx имеет хороший Угловой сервис письменный делать только то, что вы хотите

0

Вы можете попробовать простой, наименее безопасный способ сделать это, который должен введите регистрационную информацию:

username:[email protected] 

Если вы попробуете его на любом веб-сайте, он попытается войти в систему, используя то, что вы предоставили. Он может работать в вашей среде.

Как уже упоминалось в предыдущей статье, вы должны действительно создать Auth службу, которая требует от вас войти на переднем конце. Похоже, что вы не используете маршрутизацию или угловой ui-router. С помощью маршрутизации вы можете перенаправить людей на логин, прежде чем разрешать им доступ к любому из других маршрутов. This question имеет ответ, который я использовал для настройки этого поведения. И вот the example, который показывает, что определенные маршруты доступны только при аутентификации.

Смежные вопросы

 Смежные вопросы