如何使用PRAW和OAuth正确进行身份验证

时间:2018-08-03 06:41:43

标签: reactjs api flask oauth praw

我在前端使用react,在flask使用rest API。我在flask应用程序中设置了两条路由。第一个以这种方式验证了用户身份...

@app.route('/', methods=['GET'])
def authenticate():
    reddit = praw.Reddit(
        client_id="XXX",
        client_secret="XXX",
        redirect_uri="http://localhost:8080",
        user_agent="analysis script"
    )
    redirect_url = reddit.auth.url(['identity'], '...', 'permanent')
    return jsonify(redirect_url)

认证url发送到前端,当用户单击锚标记时访问认证...

componentDidMount() {

    fetch('http://localhost:5000/', {
      method: 'GET',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
      }
    })
    .then(result => result.json())
    .then(data => {
      console.log(data);
      this.setState({redirect_url: data});
    })
    .catch(e => {
      console.log(e);
      return e;
    });
  }

然后将其呈现为...

render() {

    var url = this.state.redirect_url;

    return (
      <div>
        <a href={url}>Authenticate</a>
      ...

当用户单击Authenticate时,应用程序会提示他们允许我的应用程序访问reddit。他们接受后,会将其重定向到localhost:8080上的我的应用程序。

现在的问题是,我需要查询该用户的信息,但是我不确定该怎么做。

我添加了另一个用于进行查询的锚标记...

<a href="#" onClick={e => this.handleClick(e)}>check</a>

向我的rest API发送请求...

handleClick(e) {
    fetch('http://localhost:5000/query', {
      method: 'GET',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
      }
    })
    .then(result => result.json())
    .then(data => {
      console.log(data);
    })
    .catch(e => {
      console.log(e);
      return e;
    });
  }

现在我不确定如何查询有关该用户的信息...

@app.route('/query', methods=['GET'])
def query_user():
   # I don't know what to put here

假设我想在我的query路线中实现以下目标...

print(reddit.auth.authorize(code))
print(reddit.user.me())

这些不会起作用,因为我的rest API没有为任何特定用户存储任何内容,这意味着reddit对象不再存在。我不确定如何从这里继续。我是否将reddit对象存储在每个用户的前端,然后我的rest api可以在他们提出请求时使用它?这似乎不是一个好选择,我什至不知道该怎么做。如果有人可以向我解释更好的方法,那将是有帮助的。

0 个答案:

没有答案