2014-04-18 1 views
3

로그인 및 로그 아웃에 flask_login을 사용하고 있지만 이전 페이지로 리다이렉션하는 것이 작동하지 않는 것 같습니다. 나는 flask.views와 login_required를 사용자 로그인을 요구하는 뷰의 데코레이터로 사용하고 있습니다. 그러나 로그인을 요구하는/경로에 액세스하려고하면/login/not login으로 리디렉션됩니까? next =/path 이는 request.get.args ("next")가 없음을 의미합니다.flask_login의 데코레이터가 이전 페이지로 리디렉션되지 않음

from flask import Blueprint, render_template, request, current_app, flash, redirect, url_for 
from forms import LoginForm, RegisterForm, ForgotForm 
from libs.User import User 
from flask.ext.login import login_user, login_required, logout_user, confirm_login 
from app import login_manager, flask_bcrypt 

auth_login = Blueprint('auth_login', __name__, template_folder='templates') 

@auth_login.route('/login', methods=["GET", "POST"]) 
def login(): 

    if request.method == "POST" and "email" in request.form: 
     email = request.form["email"] 
     userObj = User() 
     user = userObj.get_by_email_w_password(email) 
     if user and user.is_active() and flask_bcrypt.check_password_hash(user.password, request.form["password"]): 
      remember = request.form.get("remember", "no") == "yes" 

      if login_user(user, remember=remember): 
       flash("Logged In!") 
       return redirect(request.args.get('next') or url_for('index')) 
      else: 
       flash("Unable to log you in") 

    form = LoginForm(request.form) 
    return render_template('forms/login.html', form=form) 

는 로그인이 필요 장식에 익숙한 사람이 일부를 제공 할 수 : 나는 인증을 구현하고 별도의 청사진에

from flask import Blueprint, render_template, request, redirect, url_for 
from flask.views import MethodView 
from models import Post 
from flask.ext.mongoengine.wtf import model_form 
from flask.ext.login import login_required 

posts_app = Blueprint('posts_app', __name__, template_folder='templates', static_folder='static', static_url_path='/static') 

class ListView(MethodView): 
    decorators = [login_required] 

    def get(self): 
     posts = Post.objects.all() 
     print posts 
     return render_template('posts/list.html', posts=posts) 

posts_app.add_url_rule('/', view_func=ListView.as_view('list')) 

다음과 같이 내 청사진에 플라스크 전망 필요한 로그인을 사용하고

조언? 감사!

답변

4

무엇이 잘못되었는지 발견했습니다. 내가 정말 할 필요가있는 반면 내 인증 청사진, 나는

@login_manager.unauthorized_handler 
def unauthorized_callback(): 
    return redirect('/login') 

로 login_manager.unauthorized_handler @ 무시했다 : 내가 무슨 짓을

@login_manager.unauthorized_handler 
def unauthorized_callback(): 
    return redirect('/login?next=' + request.path) 
0

이 같은했다.

@app.after_request 
def redirect_to_signin(response): 
    if response.status_code == 401: 
     return redirect(APP_HOST + '/auth/signin?next=' + request.url) 

그러면 사용자를 인증 할 수 없을 때마다 로그인 페이지로 리디렉션 한 다음 정확하게 다시 원래 위치로 되돌립니다. 다른 호스트 이름을 사용하면 좋습니다 (예 : app.website.com & website.com). 다른 request의 URL 필드를 참조하십시오. SO answer

0

내가 한 일은 이와 비슷한 것입니다.

@app.after_request 
def redirect_to_signin(response): 
    if response.status_code == 401: 
     return redirect(APP_HOST + '/auth/signin?next=' + request.path) 

사용자가 인증 할 수 없을 때마다 로그인 페이지로 리디렉션 한 다음 정확하게 다시 원래 위치로 되돌립니다. 다른 request의 URL 입력란을 SO answer

관련 문제