Usuario
Registro de usuarios en mi servicio REST

Pregunta
-
Bueno de momento estoy con el registro de usuarios y he subido el proyecto porque tengo una duda, pero empezaremos a explicar realmente que necesito, el registro de usuarios lo quiero realizar con el objeto UsuariosRest que hereda de ApiController solamente me hace falta la parte de enviar el email al usuario hacerla.
creo que es bastante importante porque me gusta como el metodo que genera la direccion, segun cambies te genera una u otra, en el AccountController este metodo concretamente:
public async Task<string> SendEmailConfirmationTokenAsync(string userID, string subject) { string code = await UserManager.GenerateEmailConfirmationTokenAsync(userID); var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = userID, code = code }, protocol: Request.Url.Scheme); await UserManager.SendEmailAsync(userID, subject, "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>"); return callbackUrl; }
Concretamente el Url.Action no lo tengo disponible en el ApiController, entoces me dieron otra solucion que la expongo aqui en codigo es un metodo del UsuariosRes:
private async Task<string> SendEmailConfirmationTokenAsync(string userID, string subject) { //db.Database.Connection.Open(); string code = await UserManager.GenerateEmailConfirmationTokenAsync(userID); var callbackUrl1 = string.Format("/Account/ConfirmEmail?userId={0}&code={1}", userID, code); var backUrl = Url.Content("http://192.168.1.4"); var callbackUrl = backUrl + callbackUrl1; //var callbackUrl = Url.Action("ConfirmEmail", "Account", // new { userId = userID, code = code }, protocol: Request.Url.Scheme); await UserManager.SendEmailAsync(userID, subject, "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>"); //return callbackUrl; return callbackUrl; }
Como veis no me genera la direccion como el otro metodo y ademas cuando haga las pruebas depurando ejecutandolo en produccion tendre que cambiar la direccion es un follon, ¿como puedo hacer lo mismo en el ApiController que en el Controller?, os voy a dejar el codigo completamente de mi proyecto y tambien la base de datos que esta en PostgreSQL.
aqui esta subido mi proyecto
https://github.com/onzulinapps/RestService-asp.net
El fichero AccountControllery el UsuariosRestController
https://github.com/onzulinapps/RestService-asp.net/tree/master/RestAPIPlanningActivities/Controllers
La base de datos la he subido en un fichero .sql dentro de mi carpeta de onedrive
https://onedrive.live.com/redir?resid=e7a1e2fe2ab9ba9c!55062&authkey=!AIpcV5veua0o1rA&ithint=file%2csql
Bueno espero que podais ayudarme muchas gracias, saludos.
Todas las respuestas
-
-
La forma más sencilla de conseguir lo que quieres es añadirle un nuevo parámetro al método SendEmailConfirmationTokenAsync para que reciba la url de confirmación.
public async Task<string> SendEmailConfirmationTokenAsync(string userID, string subject, Uri callbackUrl)
- Editado Asier Villanueva domingo, 12 de abril de 2015 11:20
-
Yo creo que como estas diciendome, no funciona, porque la URL la tengo que generar de alguna manera y justamente donde tengo el problema es en generar la URL de confirmacion juisto en esta linea de codigo
var callbackUrl = Url.Action("ConfirmEmail", "Account",
new { userId = userID, code = code }, protocol: Request.Url.Scheme);esta mi problema no lo puedo hacer eso en un ApiController a la hora de generar la Url ¿como soluciono ese problema? el codigo lo tengo en la direccion de github.
-
Lo unico que he encontrado sobre este tema en stackoverflow es esto
http://stackoverflow.com/questions/25245065/asp-net-web-api-generate-url-using-url-action
Pero claro como genero mi direccion para que cuando le de el usuario como si pasa en el AccountController que lo tienes aqui en el metodo SendEmailConfirmationTokenAsync
Quiero hacer eso pero aqui en el metodo de ApiController SendEmailConfirmationTokenAsync
Aqui esta todo gracias
-
Necesito generar una Url mediante este metodo Url.Link Url es la propiedad de ApiController
https://msdn.microsoft.com/es-es/library/hh944655%28v=vs.118%29.aspx
y necesito hacer algo asi pero que se le parezca mas a
http://localhost:2604/Account/ConfirmEmail?userId=3f6cc0bb-8216-4a77-acfc-61998677427f&code=yvSbvzwM3%2BSRKnWTYegmkJL5g7Sy1mLv%2B99s%2FmeFfKiabe0DMUcfE%2B%2FsA53Y5Fl46mbr6Z5ihOBlciTUi4JQsjgWdpSym5K8nHwS7JNBGJRbtrbXUKuDl5NR71hTa36COJVowWYiZf%2FDV5fk60P8TfeHMPZSi%2FiB%2F%2Bmv28yXwDuLvil%2Fb0nzlGJ8BjOiLWDs
ese es el link que envio desde el Url.Link la propiedad Url de Controller
¿quien puede decirme como puedo configurar la direccion como yo quiera?, saludos.
-
Se ve que debo de estar preguntando algo super complicado de hacer o casi imposible cuando nadie sabe, ¿que tengo que hacer para enviar el link de confirmacion al correo electronico? ciertamente no lo entiendo, porque yo creo que esto no debe ser complicado aunque estoy preguntando porque no se como hacerlo.
Simplemente necesito saber hacerlo porque ya cogiendo el diseño que tiene la web por defecto de registrar usuarios y mandar mail de confirmacion me parecio muy buena idea hacerlo tambien para la version de smartphone usando el servicio REST, porque si no tengo que cambiar el diseño completamente para poder usar el registro y diseñarlo yo completamente.
Seria posible que alguien me dijera como hacer eso de generar el enlace con un metodo que se use en ApiController que lo he intentado hacer con Url.Link como he dicho un poco mas arriba, saludos y gracias.