AngularJS $resource 请求密码重置的自定义操作

AngularJS $resource Custom Action for Requesting a Password Reset

我刚开始在项目中使用 ngResource 来使用我的 RESTful 端点。这就是您使用 $resource 重置用户密码的方式吗?将电子邮件地址作为 URL 参数传递看起来很奇怪。

.factory('User', ['$resource', function ($resource) {

    var paramDefaults = {id: '@id'}

    var actions = {
        passwordReset: {
            method: 'GET',
            params: {email: '@email'},
            url: '/api/user/reset/:email'
        }
    }

    return $resource('/api/user/:id', paramDefaults, actions);
}])

是的,看起来有点奇怪。而不是 GET 我将使用 POST 请求来重置密码并在请求正文中传递电子邮件参数

只要您确保通过 HTTPS(即加密连接)调用服务,恕我直言,没有什么可反对的(当然,REST 纯粹主义者可能会在这里争论)。

就安全性而言,GET 请求(将数据作为请求参数传递)和 POST 请求(在请求正文中传递数据)的行为是相同的:如果未加密,数据可以被有权访问线路数据的攻击者窃听。除此之外,接受 GET 请求可能 - 取决于服务器端 REST 框架 - 比 POST 请求轻量级。

由于密码本身并未作为请求的一部分传递,因此您可能会认为不需要加密。但是,仍然强烈建议对请求进行加密,因为仅知道有人重置密码就可能允许攻击,并且通常会在响应中返回允许重置密码的令牌。