Tengo un método simple para tratar de validar a los usuarios cuando inician sesión, y uso Fluent nHibernate
para la persistencia, así que naturalmente implemente ISession.QueryOver<T>
para hacer este trabajo.No se pueden comparar cadenas durante nHibernate QueryOver <T>
Parece lo siguiente.
var member = session.QueryOver<Member>()
.Where(m => m.Email == Model.Email)
.Take(1).SingleOrDefault();
Ok. Entonces, los problemas a mano.
- Las direcciones de correo electrónico siempre deben compararse entre mayúsculas y minúsculas.
They should siempre en la base de datos como minúsculas. Me he esforzado mucho para que esto suceda. Y, de hecho, mi <input>
que acepta Email Address
tiene una regla de validación para permitir letras minúsculas. Pero eso aún no es lo suficientemente bueno, quiero hacer esto aún más profundo y estar absolutamente seguro de que todo es Kosher.
así que he intentado hacer esto ...
var member = session.QueryOver<Member>()
.Where(m => String.Compare
(m.Email, Model.Email, StringComparison.OrdinalIgnoreCase) == 0)
.Take(1).SingleOrDefault();
me sale una excepción que nhibernate no puede utilizar el método String.Compare
.
Me doy cuenta de que puedo resolver esto con el simple método ToLower()
, pero puede haber situaciones en las que quiero un poco más de granularidad con respecto a otros tipos de comparaciones.
¿Alguien me puede ayudar a encontrar la manera de evitar esto?
Al igual que tiene v Diferentes semánticas de comparación para iguales, y esto trae un conjunto completo de preocupaciones de seguridad en juego –
[mi respuesta] (http://stackoverflow.com/a/31404628/11635) es mucho más fea [pero no deja el sistema abierto para nombre de usuario enumerationm ataques] –