2017-02-07 13 views
0

我的数据库看起来像这样oauthlib Python中鹘自己oauthlib2

from sqlalchemy.ext.declarative import declarative_base 
import os 
import time 
import datetime 
import sys 
import uuid 
from sqlalchemy import Column, ForeignKey, Integer, String 
from sqlalchemy.orm import relationship 
from sqlalchemy import create_engine 
from sqlalchemy import * 
from sqlalchemy_utils.types.choice import ChoiceType 
from sqlalchemy_utils.types.url import URLType 
Base = declarative_base() 


class User(Base): 
    __tablename__ = 'user' 
    id = Column(Integer, primary_key=True) 
    name = Column(String(250), nullable=False) 
    fullname = Column(String(250), nullable=False) 
    password = Column(String(250), nullable=False) 

    def __repr__(self): 
     return "<User(name='%s', fullname='%s', password='%s')>" % (self.name, self.fullname, self.password) 


class Client(Base): 

    Grand_choice = [('authorization_code', 'Authorization code')] 
    Response_choice = [('code', 'Authorization code')] 
    __tablename__ = 'client' 
    id = Column(Integer, primary_key=True) 
    client_id = Column(String(250), default=uuid.uuid4() ,unique=True) 
    user = Column(Integer, ForeignKey('user.id')) 
    grant_type = Column(ChoiceType(Grand_choice)) 
    response_type = Column(ChoiceType(Response_choice)) 
    scopes = Column(String(260)) 
    default_scopes = Column(String(260)) 
    redirect_uri = Column(URLType) 
    default_redirect_uri = Column(URLType) 

class Bearer_Token(Base): 
    __tablename__ = 'Bearer_Token' 
    id = Column(Integer, primary_key=True) 
    client = Column(Integer, ForeignKey('client.id')) 
    user = Column(Integer, ForeignKey('user.id')) 
    scopes = Column(String(250)) 
    access_token = Column(String(100),unique=True) 
    refresh_token = Column(String(100),unique=True) 
    expires_at = Column(DateTime, onupdate=datetime.datetime.now) 


class Authorization_Code(Base): 
    __tablename__ = 'Authorization_code' 
    id = Column(Integer, primary_key=True) 
    client = Column(Integer, ForeignKey('client.id')) 
    user = Column(Integer, ForeignKey('user.id')) 
    scopes = Column(String(250)) 
    code = Column(String(100),unique=True) 
    expires_at = Column(DateTime, onupdate=datetime.datetime.now) 


engine = create_engine('sqlite:///sqlalchemy_oauth.db') 
Base.metadata.create_all(engine) 

和我验证这个样子的

from oauthlib.oauth2 import RequestValidator 
from modelsforoauth import User ,Client, Base 
from sqlalchemy.orm import sessionmaker 
from sqlalchemy import create_engine 

engine = create_engine('sqlite:///sqlalchemy_oauth.db', echo=True) 

Base.metadata.bind = engine 
DBSession = sessionmaker() 
DBSession.bind = engine 
session = DBSession() 
#session.query(Client.client_id).first() 


class MyRequestValidator(RequestValidator): 

    def validate_client_id(self, client_id, request): 
     try: 
      session.query(Client).filter_by(client_id=client_id).first() 
      return True 
     except Client.DoesNotExist: 
      return False 

我wannted定义端点为我猎鹰API。

from My_validator import MyRequestValidator 

from oauthlib.oauth2 import WebApplicationServer 

validator = MyRequestValidator() 
server = WebApplicationServer(validator) 


class AuthorizationView(object): 

    def __init__(self): 
     self._authorization_endpoint = server 

    def on_get(self, req, resp): 

当我看文档中的以下链接oauthlibserver

这显然说 URI,http_method,身体,头部= extract_params(请求)

怎样在猎鹰达致这 我也想检查我的数据模型是否正确,根据文档中的要求

我也不明白什么应该是范围和uri_redirect

如果我不得不在模型或一些改变代码,请专家告诉我 形式的newbee提前

感谢

回答

1

你提取PARAM功能应该是这样的:

def extract_params(request): # returns uri, http_method, body, headers return request.uri, request.method, request.stream.read(), request.headers

+0

这不会帮助我 –

+0

你能详细解释一下吗? –