我对瓶子和软木很新。我正在使用Bottle作为框架并使用MongoDB作为后端的Web应用程序。我想弄清楚如何使用Cork实现用户登录系统。
我阅读了Cork的文档和示例,并尝试着进行设置。我已经成功地将软件实例与Mongodb连接起来,因为我看到了数据库名称,我将其作为参数(后端)传递给Cork()构造函数,在mongo shell中显示。但后来我不知道如何继续前进。
我阅读了所有Cork方法的源代码,它们对我都有意义。但是他们中的很多人需要让具有足够角色级别的用户被称为“list_roles()”或“create_users()”。我知道它们的设计目的是由管理员调用。但我的问题是,当我最初没有用户时,如何开始创建一些用户并进行测试?
以下是我到目前为止所做的,我只需要一些简单的指导或示例代码即可开始。我真的很感激任何帮助!
filename:api.py
from cork import Cork
from cork.backends import MongoDBBackend
from bottle import Bottle, redirect, static_file, request, response,HTTPResponse, HTTPError, abort, debug,run, route
import bottle
from beaker.middleware import SessionMiddleware
import pymongo
session_opts = {
'session.type': 'cookie',
'session.validate_key': True,
'session.cookie_expires': True,
'session.timeout': 3600 * 24, # 1 day
'session.encrypt_key': 'lxy3344',
}
app = bottle.app()
app = SessionMiddleware(app, session_opts)
mb = MongoDBBackend(db_name='corkTry')
aaa = Cork(backend=mb, email_sender='kkgghhyy@gmail.com')
def postd():
return bottle.request.forms
def post_get(name, default=''):
return bottle.request.POST.get(name, default).strip()
# LOGIN # # LOGIN # # LOGIN # # LOGIN # # LOGIN # # LOGIN # # LOGIN #
@bottle.route('/')
@bottle.get('/login')
def login():
print aaa.current_user()
redirect('/static/login.html')
@bottle.post('/login')
def login():
print 'in post login'
"""Authenticate users"""
username = post_get('username')
password = post_get('password')
aaa.login(username, password, success_redirect='/home', fail_redirect='/login')
# REGISTER # # REGISTER # # REGISTER # # REGISTER # # REGISTER # # REGISTER #
@bottle.get('/register')
def register():
redirect('/static/register.html')
@bottle.post('/register')
def register():
# Send out register email
aaa.register(post_get('username'), post_get('password'), post_get('email_address'))
return 'Please check your mailbox.'
@bottle.route('/validate_registration/:registration_code')
def validate_registration(registration_code):
# Validate registration, create user account
aaa.validate_registration(registration_code)
return 'Thanks. <a href="/login">Go to login</a>'
@bottle.route('/static/<filepath:path>',method='GET')
def serve_static(filepath):
return static_file(filepath, root='./static/' )
@bottle.route('/home')
def home():
return '''This is the home page'''
bottle.debug(True)
bottle.run(app=app,reloader = True)
答案 0 :(得分:2)
好吧,我从来没有想到我要在Stackoverflow上发布的第一个答案是我自己的问题的答案,但我碰巧想出来了,我真的想分享它!
我的第一个问题是我不知道如何在Mongodb数据库中创建第一个用户以测试Cork所具有的功能。我尝试的第一件事是调用Cork提供的register()方法。但它引发了异常,因为我没有在数据库中定义任何角色。因此,我需要先在数据库中创建角色。
我使用了在此链接中找到的代码:
https://github.com/FedericoCeratto/bottle-cork/blob/master/examples/simple_webapp_using_mongodb.py
我刚把方法复制到我的代码中:
def populate_mongodb_backend():
mb = MongoDBBackend(db_name='corkTry', initialize=True)
# mb.users._coll.insert({
# "login": "admin",
# "email_addr": "admin@localhost.local",
# "desc": "admin test user",
# "role": "admin",
# "hash": "cLzRnzbEwehP6ZzTREh3A4MXJyNo+TV8Hs4//EEbPbiDoo+dmNg22f2RJC282aSwgyWv/O6s3h42qrA6iHx8yfw=",
# "creation_date": "2012-10-28 20:50:26.286723"
# })
mb.roles._coll.insert({'role': 'admin', 'val': 100})
mb.roles._coll.insert({'role': 'editor', 'val': 60})
mb.roles._coll.insert({'role': 'user', 'val': 50})
return mb
(我不想直接使用我在上面注释掉的代码创建管理员用户,因为如果我这样做,我将无法轻易地知道密码,哈希是直接传入的,所以我无法登录该用户)
(但是,如果您想使用我在上面注释掉的代码直接创建用户,有一种方法可以做到这一点。您只需要使用与其源代码中使用的Cork相同的哈希方法。将密码传递给哈希方法并打印出返回的哈希值。然后将哈希值传递给下面注释掉的代码以创建用户。这样你就可以知道密码并能够登录你创建的用户了)
然后执行方法(只需一次!)以在数据库中创建角色:
populate_mongodb_backend()
然后执行Cork提供的注册方法以注册新用户:
aaa.register('yourLogin','yourPassword','yourEmail@example.com',email_template='./views/registration_email.tpl')
registration_email.tpl:
<p>Hi {{username}}! Click <a href="localhost:8080/validate_registration/{{registration_code}}">HERE</a> to finish your registration</p>
然后用户应该在Mongodb的“pending_registrations”中显示,你可以通过在mongo shell中执行以下命令来检查:
use corkTry
db.pending_registrations.find()
然后你只需要转到你的电子邮件并点击链接完成注册,然后你就可以通过执行来检查Mongodb:
db.users.find()
用于设置电子邮件发送的附加信息(我只尝试过Gmail):
您需要首先确保为您的Gmail帐户启用了IMAP,然后将其设置如下:
smtp_url='starttls://yourGmailUsername:yourGmailPassword@smtp.gmail.com:587'
aaa = Cork(backend=mb, email_sender='yourGmailUsername@gmail.com',smtp_url=smtp_url)
您可以参考以下问题了解更多详情,我在这里找到了有关电子邮件设置的信息: