2017-02-07 15 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

你能詳細解釋一下嗎? –