Auth - Autenticação utilizando o MongoDB

67 views
Skip to first unread message

Rafael Costa Braga

unread,
Jun 18, 2015, 10:46:24 PM6/18/15
to web2py-us...@googlegroups.com
Boa noite,

Eu estou tentando utilizar o MongoDB com o Web2py, e para isso eu comecei com a autenticação, mas esta aparecendo uns erros que não estou entendendo.
Num banco de dados relacional, o Web2py cria as tabelas de autenticação, no MongoDB as collections também são criadas automaticamente?

Abaixo segue o codigo e o erro quando tento me logar:

db.py
db = DAL("mongodb://localhost/primer", check_reserved=["mongodb_nonreserved",],  adapter_args={"safe":False})
from gluon.tools import Auth, Service, PluginManager

auth = Auth(db)
service = Service()
plugins = PluginManager()

auth.settings.remember_me_form = False
auth.settings.actions_disabled=['register','change_password','request_reset_password','retrieve_username','profile']
auth.define_tables(username=True)

from gluon.contrib.login_methods.ldap_auth import ldap_auth
auth.settings.login_methods = [ldap_auth(server='localhost', port='10389', base_dn='ou=people,o=empresa,dc=com,dc=br')]

A autenticação é por LDAP, e funciona perfeitamente num banco de dados relacional, que possui a tabela auth_user.
Contudo, ao se logar utilizando o MongoDB, esta aparecendo o seguinte erro:

    Traceback (most recent call last):
  File "C:\Users\Rafa\Desktop\web2py-10-06-2015p4\applications\contrato\controllers/appadmin.py", line 249, in select
    nrows = db(query, ignore_common_filters=True).count()
  File "C:\Users\Rafa\Desktop\web2py-10-06-2015p4\gluon\packages\dal\pydal\objects.py", line 2016, in count
    return db._adapter.count(self.query,distinct)
  File "C:\Users\Rafa\Desktop\web2py-10-06-2015p4\gluon\packages\dal\pydal\adapters\mongo.py", line 200, in count
    count=True,snapshot=snapshot)['count'])
  File "C:\Users\Rafa\Desktop\web2py-10-06-2015p4\gluon\packages\dal\pydal\adapters\mongo.py", line 319, in select
    sort=mongosort_list, snapshot=snapshot).count()}
  File "C:\Python27\lib\site-packages\pymongo\collection.py", line 929, in find
    return Cursor(self, *args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'snapshot'

O database "primer" está criado e só possui 2 collections "posts" e "system.indexes"

Alguem poderia me ajudar com esse erro para conseguir utilizar o MongoDB junto com o Web2py?
Grato

José Ricardo Borba

unread,
Jun 19, 2015, 1:48:26 PM6/19/15
to web2py-us...@googlegroups.com
Experimente retirar os argumentos check_reserved=["mongodb_nonreserved",] e adapter_args={"safe":False}.

O meu funciona assim....

Minha segunda aposta é a linha:
auth.settings.actions_disabled=['register','change_password','request_reset_password','retrieve_username','profile']

Faça funcionar e depois tente corrigir o problema quando aparecer.

abraco,


--
Você recebeu essa mensagem por estar inscrito no grupo web2py-users-brazil.
Para enviar uma mensagem ao grupo, envie email a: web2py-us...@googlegroups.com
Para se desinscrever, envie email a: web2py-users-br...@googlegroups.com
Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito no grupo "web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para web2py-users-br...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--
José Ricardo Borba

Rafael Costa Braga

unread,
Jun 19, 2015, 4:05:25 PM6/19/15
to web2py-us...@googlegroups.com
Retirei os argumentos, alinha ficou
DAL("mongodb://localhost/primer")

Mas o erro permanece o mesmo.
O Web2py ira criar as collections "auth" assim como faz por exemplo no sqlite, criando as tabelas auth_user e as outras?

Grato pela resposta

José Ricardo Borba

unread,
Jun 19, 2015, 4:36:05 PM6/19/15
to web2py-us...@googlegroups.com
Sim, ele cria todas as tabelas (collections) do auth.
Verifique usando o CLI (digite "mongo").

Sugiro apagar o banco do mongo e tentar de novo (ou com outro nome).

Verificou se a minha segunda aposta funcionou?

Abraco,

--
Você recebeu essa mensagem por estar inscrito no grupo web2py-users-brazil.
Para enviar uma mensagem ao grupo, envie email a: web2py-us...@googlegroups.com
Para se desinscrever, envie email a: web2py-users-br...@googlegroups.com
Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito no grupo "web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para web2py-users-br...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--
José Ricardo Borba

Rafael Costa Braga

unread,
Jun 19, 2015, 7:51:12 PM6/19/15
to web2py-us...@googlegroups.com
Eu retirei a linha 
auth.settings.actions_disabled=['register','change_password','request_reset_password','retrieve_username','profile']

Mas o erro continua identico.

Criei uma nova aplicação e só modifiquei a linha db para:
db = DAL("mongodb://localhost/primer")
ou
db = DAL("mongodb://localhost:27017/primer")

O erro permanesse, o banco primer existe, verifiquei no terminal com o comando "show dbs"
No terminal no qual eu startei o banco de dados com o comando mongod aparece a conexão e o fim da conexão:
2015-06-19T20:45:59.885-0300 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:51297 #31 (3 connections now open)
2015-06-19T20:46:00.181-0300 I NETWORK  [conn31] end connection 127.0.0.1:51297 (2 connections now open)

No terminal onde iniciei o servidor web2py com o comando:
python web2py.py -a 123
aparece o seguinte erro:
WARNING:pyDAL:mongodb does not support for_update
WARNING:pyDAL:select attribute not implemented: orderby_on_limitby
Exception AttributeError: "'Cursor' object has no attribute '_Cursor__id'" in <bound method Cursor.__del__ of <pymongo.cursor.Cursor object at 0x05D8F630>> ignored



Rafael Costa Braga

unread,
Sep 2, 2015, 7:03:45 AM9/2/15
to web2py-users-brazil
Descobri o erro,

Estava utilizando a versão pymongo 3.0.2 e essa versão estava causando o erro.
Ao utilizar o pymongo 2.8 o erro não existe mais

Grato pela ajuda
Reply all
Reply to author
Forward
0 new messages