Yes, of course. This is my ticket: Error ticket for "dianaappv1" Ticket ID
127.0.0.1.2012-12-19.18-24-12.5d2b292c-7e9a-4281-a9f7-bb9aa17bbd0c <type 'exceptions.ValueError'> unsupported hash type |pbkdf2(1000,20,sha512) Versión web2py™ (2, 2, 1, datetime.datetime(2012, 10, 21, 16, 57, 4), 'stable') Python Python 2.7.1: /usr/bin/python Traceback 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. Traceback (most recent call last): File "/Applications/web2py/gluon/restricted.py", line 212, in restricted exec ccode in environment File "/Applications/web2py/applications/dianaappv1/controllers/default.py" <https://127.0.0.1:8000/admin/default/edit/dianaappv1/controllers/default.py>, line 101, in <module> File "/Applications/web2py/gluon/globals.py", line 188, in <lambda> self._caller = lambda f: f() File "/Applications/web2py/applications/dianaappv1/controllers/default.py" <https://127.0.0.1:8000/admin/default/edit/dianaappv1/controllers/default.py>, line 27, in public_call return servicios_publicos() File "/Applications/web2py/gluon/tools.py", line 4387, in __call__ return self.serve_json(request.args[1:]) File "/Applications/web2py/gluon/tools.py", line 4197, in serve_json s = universal_caller(self.json_procedures[args[0]], *args[1:], **d) File "/Applications/web2py/gluon/tools.py", line 3889, in universal_caller return f(**arg_dict) File "/Applications/web2py/applications/dianaappv1/controllers/default.py" <https://127.0.0.1:8000/admin/default/edit/dianaappv1/controllers/default.py>, line 65, in login user = auth.login_bare(usuario, password) File "/Applications/web2py/gluon/tools.py", line 1789, in login_bare if not user.registration_key and password == user[passfield]: File "/Applications/web2py/gluon/validators.py", line 2636, in __eq__ h = simple_hash(self.password, key, salt, digest_alg) File "/Applications/web2py/gluon/utils.py", line 74, in simple_hash h = hashlib.new(digest_alg) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/hashlib.py", line 121, in __hash_new return __get_builtin_constructor(name)(string) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/hashlib.py", line 88, in __get_builtin_constructor raise ValueError('unsupported hash type %s' % name) ValueError: unsupported hash type |pbkdf2(1000,20,sha512) Error snapshot [image: help] <type 'exceptions.ValueError'>(unsupported hash type |pbkdf2(1000,20,sha512)) inspect attributes Frames - *File /Applications/web2py/gluon/restricted.py in restricted at line 212* código argumentos variables - *File /Applications/web2py/applications/dianaappv1/controllers/default.py in <module> at line 101* código argumentos variables - *File /Applications/web2py/gluon/globals.py in <lambda> at line 188* código argumentos variables - *File /Applications/web2py/applications/dianaappv1/controllers/default.py in public_call at line 27* código argumentos variables - *File /Applications/web2py/gluon/tools.py in __call__ at line 4387* código argumentos variables - *File /Applications/web2py/gluon/tools.py in serve_json at line 4197* código argumentos variables - *File /Applications/web2py/gluon/tools.py in universal_caller at line 3889* código argumentos variables - *File /Applications/web2py/applications/dianaappv1/controllers/default.py in login at line 65* código argumentos variables - *File /Applications/web2py/gluon/tools.py in login_bare at line 1789* código argumentos variables - *File /Applications/web2py/gluon/validators.py in __eq__ at line 2636* código argumentos variables - *File /Applications/web2py/gluon/utils.py in simple_hash at line 74* código argumentos variables - *File /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/hashlib.py in __hash_new at line 121* código argumentos variables - *File /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/hashlib.py in __get_builtin_constructor at line 88* código argumentos variables Function argument list (name='|pbkdf2(1000,20,sha512)') Code listing 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. if bs == '512': return _sha512.sha512 elif bs == '384': return _sha512.sha384 raise ValueError('unsupported hash type %s' % name) def __get_openssl_constructor(name): try: Variables name '|pbkdf2(1000,20,sha512)' builtinValueError <type 'exceptions.ValueError'> Context locals request session response In file: /Applications/web2py/applications/dianaappv1/controllers/default.py 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. # -*- coding: utf-8 -*- # this file is released under public domain and you can use without limitations ######################################################################### ## This is a samples controller ## - index is the default action of any application ## - user is required for authentication and authorization ## - download is for downloading files uploaded in the db (does streaming) ## - call exposes all registered services (none by default) ######################################################################### servicios_publicos=Service() servicios_privados=Service() def random_password(): import string import random password = '' specials=r'!...@#$*?' for i in range(0,2): password += random.choice(string.lowercase) password += random.choice(string.uppercase) password += random.choice(string.digits) # password += random.choice(specials) return ''.join(random.sample(password,len(password))) def public_call(): return servicios_publicos() @auth.requires_login() def private_call(): return servicios_privados() @servicios_publicos.json def registra(usuario, email, password): respuesta = {} estado = 'OK' mensaje = '' tipoError = 0 #Comprueba si hay otro usuario con el mismo nombre if db(db.auth_user.username == usuario).count() != 0: estado = 'Error' tipoError = 1 #Comprueba si hay otro usuario con el mismo email if db(db.auth_user.email == email).count() != 0: estado = 'Error' tipoError = tipoError + 2 #Registrar if estado == 'OK': db.auth_user.insert(username=usuario, email=email, password=db.auth_user.password.validate(password)) mensaje = 'El registro se ha realizado correctamente.' else: if tipoError == 1: mensaje = 'El usuario ya existe.' elif tipoError == 2: mensaje = 'El email ya existe.' else: mensaje = 'El usuario y el email ya existen.' respuesta['estado'] = estado respuesta['mensaje'] = mensaje return respuesta @servicios_publicos.json def login(usuario, password): respuesta = {} user = auth.login_bare(usuario, password) if not user: respuesta['estado'] = 'Error' respuesta['mensaje'] = 'Nombre de usuario o contraseña incorrecta' else: respuesta['estado'] = 'OK' respuesta['mensaje'] = 'Login correcto' return respuesta @servicios_publicos.json def recupera_contrasenya(usuario): nueva_contrasenya = random_password() respuesta = {} fila = db(db.auth_user.username == usuario) if fila.count() == 0: respuesta['estado'] = 'Error' respuesta['mensaje'] = 'No existe el usuario' else: fila.update(password=db.auth_user.password.validate(nueva_contrasenya)) datosFila = fila.select() destino = datosFila[0].email enviado = mail.send(to=[destino], subject='Recuperación de contraseña', message='Se te ha creado una nueva contraseña. Es esta ' + nueva_contrasenya) if enviado: respuesta['estado'] = 'OK' respuesta['mensaje'] = 'Se ha enviado la contraseña a su correo electrónico.' else: respuesta['estado'] = 'Error' respuesta['mensaje'] = 'La contraseña no se ha podido enviar, reinténtelo más tarde' return respuesta #@servicios_privados.json #def metodo_privado(): # return 'private' response <https://127.0.0.1:8000/examples/global/vars/response>._vars=response <https://127.0.0.1:8000/examples/global/vars/response>._caller(public_call) El miércoles, 19 de diciembre de 2012 18:09:25 UTC+1, Massimo Di Pierro escribió: > > Can you please show me the complete traceback? > I cannot reproduce this and I this error is not generated from a web2py > function. > > On Tuesday, 18 December 2012 11:11:51 UTC-6, Massimo Di Pierro wrote: >> >> Can I see you models? Are you changing the validator for >> db.auth_user.password? >> Your error says: >> >> <type 'exceptions.ValueError'> unsupported hash type >> |pbkdf2(1000,20,sha512) >> >> I do not understand where | in |pbkdf2 would come from. >> >> >> On Tuesday, 18 December 2012 09:33:12 UTC-6, Wonton wrote: >>> >>> Hi Massimo!! >>> >>> I'm using version 2.2.1 (2012-10-21 16:57:04) stable. I dowloaded it >>> last week. >>> >>> El martes, 18 de diciembre de 2012 16:26:29 UTC+1, Massimo Di Pierro >>> escribió: >>>> >>>> Which web2py version? The error suggests you are using an older web2py >>>> version with newly created database of records. >>>> >>>> Massimo >>>> >>>> On Monday, 17 December 2012 14:59:02 UTC-6, Wonton wrote: >>>>> >>>>> Hello everyone, >>>>> >>>>> I'm developing a backend site with web2py. I have 2 web services, one >>>>> to register a user and a second one to login the user. >>>>> This is the first one: >>>>> >>>>> def register(user, email, password): >>>>> db.auth_user.insert(username=user, email=email, >>>>> password=db.auth_user.password.validate(password)) >>>>> ... >>>>> return 'OK' >>>>> >>>>> It's working ok and the users are created without problem. >>>>> >>>>> This is the second one: >>>>> >>>>> def login(user, password): >>>>> response = auth.login_bare(user, password) >>>>> if not response: >>>>> message = 'Error' >>>>> else: >>>>> message = 'OK' >>>>> return message >>>>> >>>>> With this service I have the following error: >>>>> <type 'exceptions.ValueError'> unsupported hash type >>>>> |pbkdf2(1000,20,sha512) >>>>> >>>>> I've tried to find any solution to this problem without success. >>>>> >>>>> Any of you has any idea of what is happening? >>>>> >>>>> Thank you very much and kind regards! >>>>> >>>>> Wonton >>>>> >>>> --