在 angularjs 中使用忘记密码的参数回调 url
Callback url in angularjs with parameters for forgotpassword
尝试在互联网上搜索以找到解决方案,但现在已经好几天没有运气了。我正在尝试通过网络 api 实现忘记密码功能,但在向用户发送重置电子邮件 link 后,我遇到了回调问题。
目前在我的控制器中我有
var callbackUrl = new Uri(Url.Link("ResetPasswordRoute", new { userId = cUser.Id, code = code }));
此回调将发送到用户的电子邮件。我希望用户单击此 link 并为他打开一个重置页面,该页面还传递用户 ID 和代码。所以输入新密码的视图。一旦他们提交,我希望它进入我的 httpGet resetPassword 方法,如下所示,代码、用户 ID 和新通行证如下所示。
[HttpGet]
[Route("ResetPassword", Name = "ResetPassword")]
public async Task<IHttpActionResult> ResetPassword(string userId = "", string code = "")
{
if (string.IsNullOrWhiteSpace(userId) || string.IsNullOrWhiteSpace(code))
{
ModelState.AddModelError("", "User Id and Code are required");
return BadRequest(ModelState);
}
IdentityResult result = await _repo.ResetPasswordRoute(userId,code);
if (result.Succeeded)
{
return Ok();
}
else
{
return GetErrorResult(result);
}
}
所以问题是,当单击 link 时,我真的很困惑如何设置 ResetPasswordRoute 以在 webapi 中推送视图。以及 angularjs 将如何捕获参数,因为 url 是阴影线 url 并且它需要另一个路由页面。
我创建了一条路线:
}).when("/pages/reset", {
templateUrl: "app/views/pages/reset-password.html"
我意识到我不能真正使用 $routeparameters。我已经阅读了大部分指南,但所有指南都是针对 MVC 的,它们具有基于字符串代码的 return View() != null 和 webapi 不使用 View()。任何帮助将不胜感激。
我不熟悉 asp.net,但对 Angular 和 REST API 非常熟悉。希望这有助于...
在您的 Angular 应用中,您有一个 link 供用户重置密码。这应该使用 $http
来调用您的网络 API,它会生成某种令牌并通过电子邮件发送给用户。
应该由 API 来生成 URL,其中将包含带有 userId 和重置令牌的路由或查询参数。类似于:
https://example.com/reset-password/123456/ABCDEF
-或-
https://example.com/reset-password?userId=123456&token=ABCDEF
您的 Angular 应用应该有一个路由。假设您使用的是 ngRoute,您的路由配置将如下所示:
.when('/reset-password', {
controller: 'ResetPasswordController',
controllerAs: 'reset',
templateUrl: 'path/to/template.html'
})
此路线的控制器应如下所示:
function ResetPasswordController($http, $routeParams) {
var reset = this;
var userId = $routeParams.userId;
var token = $routeParams.token;
reset.submit = function(newPassword) {
var data = {...};
var config = {...};
$http.post('https://api.example.com/reset-password', data, config)
.then(function onSuccess(res) {...}, function onError(err) {...});
};
}
提交密码表单后,重置页面的模板将调用 reset.submit()
。
此时,您已拥有用户 ID、重置令牌和新密码。您需要决定是在 auth header 中传递此信息,还是在请求 body 中传递此信息,或者两者的某种组合。您还应该在 $http
配置中使用 withCredentials 选项。
此 Web API 端点随后需要验证令牌和用户 ID,如果有效则重置用户密码。
如果 API 以 200 的状态代码响应,您可以将用户重定向到登录页面。否则,处理错误。
这是否回答了您的问题?
尝试在互联网上搜索以找到解决方案,但现在已经好几天没有运气了。我正在尝试通过网络 api 实现忘记密码功能,但在向用户发送重置电子邮件 link 后,我遇到了回调问题。
目前在我的控制器中我有
var callbackUrl = new Uri(Url.Link("ResetPasswordRoute", new { userId = cUser.Id, code = code }));
此回调将发送到用户的电子邮件。我希望用户单击此 link 并为他打开一个重置页面,该页面还传递用户 ID 和代码。所以输入新密码的视图。一旦他们提交,我希望它进入我的 httpGet resetPassword 方法,如下所示,代码、用户 ID 和新通行证如下所示。
[HttpGet]
[Route("ResetPassword", Name = "ResetPassword")]
public async Task<IHttpActionResult> ResetPassword(string userId = "", string code = "")
{
if (string.IsNullOrWhiteSpace(userId) || string.IsNullOrWhiteSpace(code))
{
ModelState.AddModelError("", "User Id and Code are required");
return BadRequest(ModelState);
}
IdentityResult result = await _repo.ResetPasswordRoute(userId,code);
if (result.Succeeded)
{
return Ok();
}
else
{
return GetErrorResult(result);
}
}
所以问题是,当单击 link 时,我真的很困惑如何设置 ResetPasswordRoute 以在 webapi 中推送视图。以及 angularjs 将如何捕获参数,因为 url 是阴影线 url 并且它需要另一个路由页面。
我创建了一条路线:
}).when("/pages/reset", {
templateUrl: "app/views/pages/reset-password.html"
我意识到我不能真正使用 $routeparameters。我已经阅读了大部分指南,但所有指南都是针对 MVC 的,它们具有基于字符串代码的 return View() != null 和 webapi 不使用 View()。任何帮助将不胜感激。
我不熟悉 asp.net,但对 Angular 和 REST API 非常熟悉。希望这有助于...
在您的 Angular 应用中,您有一个 link 供用户重置密码。这应该使用 $http
来调用您的网络 API,它会生成某种令牌并通过电子邮件发送给用户。
应该由 API 来生成 URL,其中将包含带有 userId 和重置令牌的路由或查询参数。类似于:
https://example.com/reset-password/123456/ABCDEF
-或-
https://example.com/reset-password?userId=123456&token=ABCDEF
您的 Angular 应用应该有一个路由。假设您使用的是 ngRoute,您的路由配置将如下所示:
.when('/reset-password', {
controller: 'ResetPasswordController',
controllerAs: 'reset',
templateUrl: 'path/to/template.html'
})
此路线的控制器应如下所示:
function ResetPasswordController($http, $routeParams) {
var reset = this;
var userId = $routeParams.userId;
var token = $routeParams.token;
reset.submit = function(newPassword) {
var data = {...};
var config = {...};
$http.post('https://api.example.com/reset-password', data, config)
.then(function onSuccess(res) {...}, function onError(err) {...});
};
}
提交密码表单后,重置页面的模板将调用 reset.submit()
。
此时,您已拥有用户 ID、重置令牌和新密码。您需要决定是在 auth header 中传递此信息,还是在请求 body 中传递此信息,或者两者的某种组合。您还应该在 $http
配置中使用 withCredentials 选项。
此 Web API 端点随后需要验证令牌和用户 ID,如果有效则重置用户密码。
如果 API 以 200 的状态代码响应,您可以将用户重定向到登录页面。否则,处理错误。
这是否回答了您的问题?