2015-08-10 26 views
11

Flask-login doc biz next_is_valid() kullanarak bir sonraki doğrulamak gerektiğini söylüyor, ancak böyle bir yöntem bulamıyorum:next_is_valid() flask-login'de mevcut değil mi?

Warning: You MUST validate the value of the next parameter. If you do not, your application will be vulnerable to open redirects.

@app.route('/login', methods=['GET', 'POST']) 
def login(): 
    # Here we use a class of some kind to represent and validate our 
    # client-side form data. For example, WTForms is a library that will 
    # handle this for us. 
    form = LoginForm() 
    if form.validate_on_submit(): 
     # Login and validate the user. 
     login_user(user) 

     flask.flash('Logged in successfully.') 

     next = flask.request.args.get('next') 
     if not next_is_valid(next): 
      return flask.abort(400) 

     return flask.redirect(next or flask.url_for('index')) 
    return flask.render_template('login.html', form=form) 

hatası alıyorum bu Running:

NameError: global name 'next_is_valid' is not defined 

Ve bunu yaparsam:

from flask.ext.login import next_is_valid 
>> ImportError: cannot import name next_is_valid 

nerededir?işlevi ve yoksa, next parametresini nasıl doğrularım?

+1

"next" ile next_is_valid değerini doğrulamanız gerektiğini söylemez. Bu sadece bir örnek işlevdir; Haklısın, mevcut değil. Kendi kriterlerinize göre geçerliyse “ileri” ye karar vermelisiniz. 'next', başarılı bir girişe yönlendirme URL’si. Umarım bu biraz yardımcı olur. – bnjmn

+0

@bnjmn bu bir cevap olarak eklenmesi gerektiğini düşünüyorum bazı referanslar ile;) –

cevap

9

Size

You MUST validate the value of the next parameter.

next_is_valid sadece bir örnektir fonksiyonudur Sadece bu da next_is_valid ile next doğrulamak gerekir söylemez.

next'un kendi ölçütlerinize göre geçerli olup olmadığını belirlemelisiniz. next, başarılı bir giriş için yönlendirme URL'si. Sitenizde uygulamak veya kısıtlamaları uygulamak için herhangi bir izniniz varsa, bunların uygulandığından emin olmak istersiniz. Örneğin, bir kullanıcı url http://example.com/login?next=admin/delete/all/users isteğiyle oturum açmayı deneyebilir. Oturum açma girişimi başarılı olduysa ve yönetici izniniz giriş fonksiyonunuzda veya uç noktasının kendisinde kontrol edilmediyse, kötü şeyler olabilir. Her şey, uygulamanızı nasıl yapılandırdığınıza ve bireysel uç noktalara erişimi kontrol ettiğinize bağlıdır.

+0

Bu demek olsa ki, 'http: // example.com/admin/delete/all/users' _is_ '@ admin_required' gibi bir şey tarafından korunan - next_is_valid() 'gibi bir çekiniz olması gerekmez mi? – qff

+1

@qff Tam olarak. Kontrol, rotadaki '@ admin_required' dekoratörüyle gerçekleştirilecektir. – bnjmn