我在这里回答了一个类似的问题:AngularJS Authentication + RESTful API
我已经为UserApp编写了一个AngularJS 模块,它几乎可以满足您的需求。您可以:
- 修改模块并将函数附加到您自己的 API,或
- 将该模块与UserApp(基于云的用户管理 API)一起使用
https://github.com/userapp-io/userapp-angular
它支持受保护/公共路由、登录/注销时重新路由、用于状态检查的心跳、将会话令牌存储在 cookie 中、事件等。
如果您使用 UserApp,则不必为用户内容编写任何服务器端代码(不仅仅是验证令牌)。参加Codecademy 上的课程来尝试一下。
以下是它如何工作的一些示例:
带有错误处理的登录表单:
<form ua-login ua-error="error-msg">
<input name="login" placeholder="Username"><br>
<input name="password" placeholder="Password" type="password"><br>
<button type="submit">Log in</button>
<p id="error-msg"></p>
</form>
带有错误处理的注册表单:
<form ua-signup ua-error="error-msg">
<input name="first_name" placeholder="Your name"><br>
<input name="login" ua-is-email placeholder="Email"><br>
<input name="password" placeholder="Password" type="password"><br>
<button type="submit">Create account</button>
<p id="error-msg"></p>
</form>
如何指定哪些路由应该是公开的,哪些路由是登录表单:
$routeProvider.when('/login', {templateUrl: 'partials/login.html', public: true, login: true});
$routeProvider.when('/signup', {templateUrl: 'partials/signup.html', public: true});
.otherwise()
路由应设置为您希望用户在登录后重定向的位置。例子:
$routeProvider.otherwise({redirectTo: '/home'});
退出链接:
<a href="#" ua-logout>Log Out</a>
(结束会话并重定向到登录路由)
访问用户属性:
使用服务访问用户属性user
,例如:user.current.email
或者在模板中:<span>{{ user.email }}</span>
隐藏仅在登录时才可见的元素:
<div ng-show="user.authorized">Welcome {{ user.first_name }}!</div>
根据权限显示一个元素:
<div ua-has-permission="admin">You are an admin</div>
并且要对您的后端服务进行身份验证,只需使用user.token()
获取会话令牌并将其与 AJAX 请求一起发送。在后端,使用UserApp API(如果您使用 UserApp)来检查令牌是否有效。
如果您需要任何帮助,请告诉我 :)