Guest User

Untitled

a guest
Nov 15th, 2018
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.80 KB | None | 0 0
  1. from flask import Flask, jsonify, make_response, request, session
  2. from flask_cors import CORS
  3. from flask_jwt_extended import (
  4. JWTManager, jwt_required, create_access_token, get_jwt_identity
  5. )
  6.  
  7. app = Flask(__name__)
  8. app.config['JWT_SECRET_KEY'] = 'example_secret'
  9. app.secret_key = 'example_secret'
  10. jwt = JWTManager(app)
  11. CORS(app)
  12.  
  13.  
  14. @app.route('/')
  15. def welcome():
  16. session['access_token'] = "example"
  17. resp = make_response('Welcome! ' + session.get('access_token'))
  18. return resp
  19.  
  20.  
  21. @app.route('/login', methods=['POST'])
  22. def login():
  23. if not request.is_json:
  24. return jsonify({"msg": "Missing JSON in request"}), 400
  25.  
  26. username = request.json.get('username', None)
  27. password = request.json.get('password', None)
  28. if not username:
  29. return jsonify({"msg": "Missing username parameter"}), 400
  30. if not password:
  31. return jsonify({"msg": "Missing password parameter"}), 400
  32.  
  33. access_token = create_access_token(identity=username)
  34.  
  35. # This approach does not seem to work when called
  36. # from the React frontend via a POST request
  37. session['access_token'] = access_token
  38.  
  39. # ref: https://stackoverflow.com/a/26588078/1167750
  40. result = jsonify(access_token=access_token)
  41. # This approach also does not seem to work when called
  42. # from the React frontend via a POST request
  43. result.set_cookie('access_token', access_token)
  44. return result
  45.  
  46.  
  47. @app.route('/dashboard', methods=['GET'])
  48. @jwt_required
  49. def dashboard():
  50. current_user = get_jwt_identity()
  51. return jsonify(logged_in_as=current_user), 200
  52.  
  53.  
  54. if __name__ == '__main__':
  55. app.run()
  56.  
  57. import axios from 'axios';
  58. import React, { Component } from 'react';
  59. import {
  60. BrowserRouter as Router,
  61. Link,
  62. Redirect,
  63. Route,
  64. withRouter
  65. } from 'react-router-dom';
  66. import './App.css';
  67.  
  68. class App extends Component {
  69. state = {
  70. todos: []
  71. };
  72.  
  73. async componentDidMount() {
  74. }
  75.  
  76. render() {
  77. const { todos } = this.state
  78. return (
  79. <Router>
  80. <Root>
  81. <Sidebar>
  82. <div>
  83. <LoginForm />
  84. </div>
  85. </Sidebar>
  86. <Main>
  87. <Route exact={true} path='/' render={() => (
  88. <h2>Welcome</h2>
  89. )}/>
  90. </Main>
  91. </Root>
  92. </Router>
  93. );
  94. }
  95. }
  96.  
  97. class LoginForm extends React.Component {
  98. constructor(props) {
  99. super(props);
  100. this.state = {
  101. username: '',
  102. password: '',
  103. };
  104.  
  105. // ref: https://gist.github.com/joelgriffith/43a4a8195c9fd237a222fe84c2b2e2b4
  106. this.handleUsernameChange = this.handleUsernameChange.bind(this);
  107. this.handlePasswordChange = this.handlePasswordChange.bind(this);
  108. this.handleSubmit = this.handleSubmit.bind(this);
  109. }
  110.  
  111. handleUsernameChange(event) {
  112. this.setState({username: event.target.value});
  113. }
  114.  
  115. handlePasswordChange(event) {
  116. this.setState({password: event.target.value});
  117. }
  118.  
  119. handleSubmit(event) {
  120. alert('login submitted: ' + this.state.username);
  121. event.preventDefault();
  122.  
  123. // ref: https://blog.stvmlbrn.com/2017/04/07/submitting-form-data-with-react.html
  124. const { username, password } = this.state;
  125.  
  126. axios.post('http://127.0.0.1:5000/login', {
  127. username: username,
  128. password: password
  129. })
  130. .then(function(response) {
  131. console.log(response);
  132. alert(response.data.access_token);
  133. })
  134. .catch(function(error) {
  135. console.log(error);
  136. })
  137. }
  138.  
  139. render() {
  140. return (
  141. <form onSubmit={this.handleSubmit}>
  142. <label>
  143. Username:
  144. <input type="text" value={this.state.username} onChange={this.handleUsernameChange} />
  145. </label>
  146. <label>
  147. Password:
  148. <input type="password" value={this.state.password} onChange={this.handlePasswordChange} />
  149. </label>
  150. <input type="submit" value="Login" />
  151. </form>
  152. )
  153. }
  154. }
Add Comment
Please, Sign In to add comment