Login Modul mit Flask
Verfasst: Mittwoch 22. April 2015, 20:35
Guten Abend zusammen,
spiele gerade ein wenig mit der Flask extension "login" herum. Habe ein ganze einfaches Beispiel geschrieben und mich an diesem hier: https://github.com/flask-admin/flask-ad ... uth/app.py orientiert.
Wenn ich mich nun versuche einzuloggen kommt der Fehler:
Also das ganze installiert und mich in den QuickStart guide (http://pythonhosted.org/Flask-Security/quickstart.html) eingelesen und gemerkt, dass man dort sehr viel Vordefinieren muss und an viele Restriktionen gebunden ist.
Ist dies wirklich so oder übersehe ich das offensichtliche?
spiele gerade ein wenig mit der Flask extension "login" herum. Habe ein ganze einfaches Beispiel geschrieben und mich an diesem hier: https://github.com/flask-admin/flask-ad ... uth/app.py orientiert.
Code: Alles auswählen
from flask import Flask, render_template, request, session
from flask.ext.sqlalchemy import SQLAlchemy
import flask.ext.login as login
from passlib.hash import pbkdf2_sha256
app = Flask(__name__)
login_manager = login.LoginManager()
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://root:passwd@localhost:3307/flask_test"
app.config["SECRET_KEY"] = "123456789"
db = SQLAlchemy(app)
login_manager.init_app(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
vorname = db.Column(db.String(50))
nachname = db.Column(db.String(50))
password = db.Column(db.String(100))
email = db.Column(db.String(120), unique=True)
def __init__(self, vorname, nachname, password, email):
self.vorname = vorname
self.nachname = nachname
self.password = password
self.email = email
def __repr__(self):
return "<User %r>" %self.email
def is_authenticated(self):
return True
def is_active(self):
return True
def is_anonymous(self):
return False
def get_id(self):
return self.id
@login_manager.user_loader
def load_user(userid):
return User.query.filter_by(id=userid).one()
def hashnewpasswd(password):
return pbkdf2_sha256.encrypt(password, rounds=2000, salt_size=16)
def verifypasswd(aktpasswd, dbpasswd):
return pbkdf2_sha256.verify(aktpasswd, dbpasswd)
@app.route("/login", methods=["GET", "POST"])
def login():
print "login"
if request.method == "POST":
if not "email" in request.form or not "password" in request.form:
return render_template("login.html", fehler=True)
user = request.form["email"]
passwd = request.form["password"]
userrec = User.query.filter_by(email=user).all()
if not userrec:
print "Kein User gefunden"
return render_template("login.html", fehler=True)
print userrec[0]
if not verifypasswd(passwd, userrec[0].password):
print "Passwort ist falsch"
return render_template("login.html", fehler=True)
login_user(userrec[0])
return "Eingelogt"
return render_template("login.html")
if __name__ == "__main__":
app.debug = True
app.run(host="0.0.0.0")
Code: Alles auswählen
{% extends "layout.html" %}
{% block content %}
{% if fehler == True%}
<h1>Fehler</h1>
{%endif%}
<link rel="stylesheet" href="{{ url_for('static', filename='css/login.css') }}">
<div class="container">
<form class="form-signin" method="post" action="{{url_for('login')}}">
<h2 class="form-signin-heading">Please sign in</h2>
<label for="inputEmail" class="sr-only">Email address</label>
<input type="email" name="email" id="inputEmail" class="form-control" placeholder="Email address" required autofocus>
<label for="inputPassword" class="sr-only">Password</label>
<input type="password" name="password" id="inputPassword" class="form-control" placeholder="Password" required>
<div class="checkbox">
<label>
<input type="checkbox" value="remember-me"> Remember me
</label>
</div>
<button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
</form>
</div> <!-- /container -->
{% endblock %}
Wenn ich mich nun versuche einzuloggen kommt der Fehler:
Also ein wenig gegoogelt und herausbekommen, dass man das Modul "flask-security" noch braucht.Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/tom/Dokumente/web-workspace/haba-fanreisen/haba.py", line 124, in login
login_user(userrec[0])
File "/usr/local/lib/python2.7/dist-packages/flask_security/utils.py", line 64, in login_user
if _security.trackable:
File "/usr/local/lib/python2.7/dist-packages/werkzeug/local.py", line 338, in __getattr__
return getattr(self._get_current_object(), name)
File "/usr/local/lib/python2.7/dist-packages/werkzeug/local.py", line 297, in _get_current_object
return self.__local()
File "/usr/local/lib/python2.7/dist-packages/flask_security/utils.py", line 35, in <lambda>
_security = LocalProxy(lambda: current_app.extensions['security'])
KeyError: 'security'
Also das ganze installiert und mich in den QuickStart guide (http://pythonhosted.org/Flask-Security/quickstart.html) eingelesen und gemerkt, dass man dort sehr viel Vordefinieren muss und an viele Restriktionen gebunden ist.
Ist dies wirklich so oder übersehe ich das offensichtliche?