Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 12, 2014 09:34:50

zigen
Зарегистрирован: 2014-08-13
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

[flask] не работает @login_required

Добрый день. Точнее работает, но не пойму как ему сказать, что пользователь авторизован.
После авторизации иду в /admin, но все равно кидает на login

View:

@app.route('/login', methods = ['GET', 'POST'])
def login():
    form = LoginForm()
    if request.method == 'GET':
        return render_template('login.html',
            title = 'Sign In',
            form = form)
    if form.validate_on_submit():
        remember_me= False
        if form.remember_me.data:
            remember_me=True
        name=form.login.data
        password=hashlib.md5(form.password.data.encode('utf-8')).hexdigest()
        registered_user = User.query.filter_by(name=name,password=password).first()
        if registered_user is None:
            flash('Пользователь или пароль введены неверно', 'error')
            return redirect(url_for('login'))
        login_user(registered_user, remember=remember_me)
        flash('Logged in successfully')
        return redirect(request.args.get('next') or url_for('index'))
@app.route('/admin')
@login_required
def admin():
    if g.user is not None and g.user.is_authenticated():
        return redirect(url_for('login'))
    return render_template('admin.html',
        title = 'Administration')
@app.before_request
def before_request():
    g.user = current_user
@lm.user_loader
def load_user(id):
    return User.query.get(int(id))

Модель:

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key = True)
    name = Column (String(30), unique=True)
    email = Column(String(120), unique = True)
    password = Column(String(64))
    role = Column(Integer, default = ROLE_USER)
    date_creation = Column(DateTime, default=datetime.datetime.utcnow())
    posts = relationship('Post', backref = 'author', lazy = 'dynamic')
    def __init__(self,name=None,email=None,password=None):
        self.name = name
        self.email = email
        self.password = password
    def is_authenticated(self):
        return True
    def is_active(self):
        return True
    def is_anonymous(self):
        return False
    def get_id(self):
        return str(self.id).encode('utf-8')
    def __repr__(self):
        return '<User %r>' % (self.name)

Офлайн

#2 Ноя. 12, 2014 10:04:15

zigen
Зарегистрирован: 2014-08-13
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

[flask] не работает @login_required

Блин все работает. Туплю. Убейте тему, плиз

надо было сделать так

@app.route('/admin')
@login_required
def admin():
    if g.user is not None and g.user.is_authenticated():
        return render_template('admin.html',
            title = 'Administration')
    else:
        return redirect(url_for('login'))

Офлайн

#3 Ноя. 12, 2014 18:29:03

4kpt_II
От: Харьков
Зарегистрирован: 2013-10-24
Сообщения: 999
Репутация: +  58  -
Профиль   Отправить e-mail  

[flask] не работает @login_required

Посмотрите в сторону flask-classy. Рекомендую…

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version