में काम करता है मैं उपयोगकर्ताओं के लिए डिफ़ॉल्ट भूमिकाएं सेट अप करने के लिए उपयोगकर्ता_registered सिग्नल का उपयोग करने का प्रयास कर रहा हूं, जब वे निम्न लिंक में फ्लास्क-सुरक्षा का उपयोग करके पंजीकरण करते हैं: Setting Default Role in Flask Securityफ्लास्क-सुरक्षा उपयोगकर्ता_registered सिग्नल पायथन 3.3 में प्राप्त नहीं हुआ है, लेकिन 2.7
अपनी खोजों में मैं देख सकता हूँ एक बग कि पहले से ही कुप्पी के सुरक्षा में इस के लिए संबोधित किया था: Not getting signal from flask-security, Fix - user_registered signal problem
मैं अगर सिग्नल न होने हैंडलर द्वारा प्राप्त होता है साबित करने के लिए निम्नलिखित की कोशिश की है कोई भाग्य:
@user_registered.connect_via(app)
def user_registered_sighandler(sender, **extra):
print("print-user_registered_sighandler:", extra)
हालांकि, उपयोगकर्ता को पंजीकृत होने के बावजूद कभी भी कॉल नहीं किया जाता है और संकेत भेजा जाना चाहिए।
यह मदद करता है मैं कुप्पी के सुरक्षा विन्यास के रूप में इस सेट कर लिया है: कुप्पी के लॉगिन और कुप्पी के प्रधान मेरे लिए काम कर रहे हैं से
app.config['SECURITY_REGISTERABLE'] = True
app.config['SECURITY_CONFIRMABLE'] = False
app.config['SECURITY_SEND_REGISTER_EMAIL'] = False
app.config['SECURITY_CHANGEABLE'] = True
app.config['SECURITY_SEND_PASSWORD_CHANGE_EMAIL'] = False
सिग्नल के रूप में मैं इस बात की पुष्टि करने में कामयाब रहे कि निम्नलिखित कोड के टुकड़े को सफलतापूर्वक प्रिंट जब संकेत भेजा जाता है:
@user_logged_out.connect_via(app)
def on_user_logged_out(sender, user):
print('USER LOG OUT: made it in',user)
@identity_changed.connect_via(app)
def identity_changed_ok(sender,identity):
print('Identity changed:',identity)
मेरी सेटअप मैं उपयोग कर रहा हूँ अजगर 3.3 (एनाकोंडा) और निम्न का उपयोग कर के लिए: बोतल == 0.10.1, कुप्पी के लॉगिन == 0.2.11, कुप्पी के प्रिंसिपल == 0.4.0, कुप्पी के सुरक्षा == 1.7.4, ब्लिंकर == 1.3। फ्लास्क-लॉगिन और फ्लास्क-सुरक्षा दोनों में सिग्नल को देखते हुए मुझे यकीन नहीं है कि फ्लास्क-सुरक्षा संकेत क्यों काम नहीं करेंगे।
संपादित करें:
अगर मैं अपने अनुप्रयोग में एक मार्ग के लिए print(user_registered.receivers)
जोड़ने यह दिखा देंगे मैं एक रिसीवर है कि: {139923381372400: <function user_registered_sighandler at 0x7f42737145f0>}
। अगर मैं सिर्फ user_registered.send(app._get_current_object(),user=user, confirm_token=token)
से पहले कुप्पी के सुरक्षा की registerable.py भीतर यह एक ही प्रिंट बयान कर दिया तो यह कोई रिसीवर को सूचीबद्ध करता है: {}
EDIT2:
समस्या अजगर 3.3 का उपयोग कर से संबंधित प्रतीत होता है। मैंने एक पायथन 2.7 वातावरण बनाया और उपयोगकर्ता_registered कोड अपेक्षित के रूप में काम किया।
पूर्ण कोड पुन: पेश करने:
from flask import Flask,render_template
from playhouse.flask_utils import FlaskDB
import os
from flask.ext.security import Security, PeeweeUserDatastore
from flask.ext.security.signals import user_registered
from flask.ext.login import user_logged_out
from peewee import *
from playhouse.signals import Model
from flask.ext.security import UserMixin,RoleMixin
app = Flask(__name__)
app.config['ADMIN_PASSWORD']='secret'
app.config['APP_DIR']=os.path.dirname(os.path.realpath(__file__))
app.config['DATABASE']='sqliteext:///%s' % os.path.join(app.config['APP_DIR'], 'blog.db')
app.config['SECRET_KEY'] = 'shhh, secret!'
app.config['SECURITY_REGISTERABLE'] = True
app.config['SECURITY_CONFIRMABLE'] = False
app.config['SECURITY_SEND_REGISTER_EMAIL'] = False
flask_db = FlaskDB()
flask_db.init_app(app)
database = flask_db.database
class BaseModel(Model):
class Meta:
database=flask_db.database
class User(BaseModel, UserMixin):
email=CharField()
password=CharField()
active = BooleanField(default=True)
confirmed_at = DateTimeField(null=True)
def is_active(self):
return True
def is_anonymous(self):
return False
def is_authenticated(self):
return True
class Role(BaseModel, RoleMixin):
name = CharField(unique=True)
description = TextField(null=True)
class UserRoles(BaseModel):
user = ForeignKeyField(User, related_name='roles')
role = ForeignKeyField(Role, related_name='users')
name = property(lambda self: self.role.name)
description = property(lambda self: self.role.description)
user_datastore = PeeweeUserDatastore(database, User, Role, UserRoles)
security = Security(app, user_datastore)
@user_registered.connect_via(app)
def user_registered_sighandler(sender,**extra):
print("print-user_registered_sighandler")
@user_logged_out.connect_via(app)
def on_user_logged_out(sender, user):
print('USER LOG OUT: made it in',user)
@app.route('/')
def index():
print(user_registered.receivers)
return render_template('base.html')
database.create_tables([User,Role,UserRoles], safe=True)
app.run(debug=True)
base.html टेम्पलेट:
<!doctype html>
<html>
<head>
<title>Blog</title>
</head>
<body>
<ul>
{% if current_user.is_authenticated() %}
<li><a href="{{ url_for('security.logout',next='/') }}">Log out</a></li>
<li><a href="{{ url_for('security.register') }}">Register</a></li>
{% else %}
<li><a href="{{ url_for('security.login',next='/') }}">Login</a></li>
<li><a href="{{ url_for('security.register') }}">Register</a></li>
{% endif %}
{% block extra_header %}{% endblock %}
</ul>
</body>
</html>
अद्यतन: अब यह flask_security आयात उपयोगकर्ता_registered 'से है –