- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在构建一个新的 Angular2 应用程序,它将驻留在 .NET 应用程序平台中。我的 Angular2 应用程序应该让当前登录的用户调用 API 来获取数据。如何将 userId 获取到我的应用程序中。
最佳答案
由于您没有明确指定您使用的是什么 .Net 平台,我假设它是最新的平台 - Asp.Net Core 和 Asp.Net Identity 作为身份验证提供程序。
如果您使用默认的 Asp.Net Identity 模板,您可以简单地对您的 Web API 请求使用基于 cookie 的身份验证。当您通过 Angular 2s http
服务进行调用时,您的浏览器会自动将 cookie 传递给服务器,因此您无需在那里明确指定任何内容。
这里有一些最小的代码,可以做你想做的事:
[HttpPost("Login")]
public async Task<IActionResult> Login([FromBody] LoginPost model)
{
if (ModelState.IsValid)
{
// Require the user to have a confirmed email before they can log on.
var user = await _userManager.FindByEmailAsync(model.Email);
if (user != null)
{
var result = await _signInManager.PasswordSignInAsync(user, model.Password, model.StayLoggedIn, lockoutOnFailure: false);
if (result.Succeeded)
{
return Ok();
}
}
}
return BadRequest();
}
这是从您的登录组件调用的,例如托管您的登录表单的组件。
public login(email: string, password: string, stayLoggedIn: boolean): Promise<boolean> {
var url = '/Api/Account/Login';
var loginCredentials = {
email: email,
password: password,
stayLoggedIn: stayLoggedIn
};
return this.http
.post(url, loginCredentials)
.toPromise()
.then(response => {
return response.ok;
})
.catch(() => {
return false;
});
}
成功登录后,_signInManager.PasswordSignInAsync()
将在客户端设置一个 cookie,该 cookie 由框架自动验证以用于进一步的请求。
[HttpGet("Auth")]
public async Task<IActionResult> Auth()
{
var model = new AuthGet();
if (!User.Identity.IsAuthenticated)
{
model.IsAuthenticated = false;
return Ok(model);
}
var user = await _userManager.GetUserAsync(User);
var roles = await _userManager.GetRolesAsync(user);
model.Username = user.UserName;
model.IsAuthenticated = true;
model.Id = user.Id;
model.Email = user.Email;
model.Roles = roles;
return Ok(model);
}
这只是一些服务器端代码,返回有关当前登录用户的基本信息
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import { Http } from '@angular/http';
import { Auth } from '../Models/Account/auth';
@Injectable()
export class AuthService {
private authSource = new BehaviorSubject<Auth>(new Auth);
public auth = this.authSource.asObservable();
constructor(private http: Http) {
this.updateAuth();
}
public updateAuth() {
var url = '/Api/Account/Auth';
this.http
.get(url)
.toPromise()
.then(response => {
var auth = response.json() as Auth;
this.authSource.next(auth);
});
}
}
此 AuthService
现在提供一个 Observable
,您可以在您的组件中订阅它,例如例如像这样:
private auth: Auth;
private authSubscription: Subscription;
ngOnInit() {
this.updateProfileOverview();
this.authSubscription = this.authService.auth.subscribe(newAuth => {
this.auth = newAuth;
// React to the new auth value
});
}
现在框架会自动验证请求,您可以使用 Asp.Net Identity 的 UserManager
,方法是将它注入(inject)您的 Controller 并使用它来获取用户 ID,如下所示:
namespace App.Controllers
{
public class DataController : Controller
{
public NotesController(UserManager<ApplicationUser> userManager)
{
_userManager = userManager;
}
private readonly UserManager<ApplicationUser> _userManager;
public async Task<IActionResult> CreateNote()
{
var userId = _userManager.GetUserId(User);
// Use it...
}
}
}
User
属性存在于从基 Controller
类派生的所有类中。
关于angular - 让登录用户从 .NET 平台登录到 Angular 2 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42395750/
在为 Web 应用程序用例图建模时,为用户可以拥有的每个角色创建一个角色是否更好?或拥有一个角色、用户和一个具有特权的矩阵? guest < 用户 < 版主 < 管理员 1: guest 、用户、版主
我无法使用 Elixir 连接到 Postgres: ** (Mix) The database for PhoenixChat.Repo couldn't be created: FATAL 28P
这个问题已经有答案了: Group by field name in Java (7 个回答) 已关闭 7 年前。 我必须编写一个需要 List 的方法并返回 Map> . User包含 Person
感谢您的帮助,首先我将显示代码: $dotaz = "Select * from customers JOIN contracts where customers.user_id ='".$_SESS
我只想向所有用户中的一个用户显示一个按钮。我尝试了 orderByKey() 但没有成功! 用户模型有 id 成员,我尝试使用 orderByChild("id") 但结果相同! 我什至尝试了以下技巧
我们在工作中从 MongoDB 切换到 Postgres,我正在建立一个 BDR 组。 在这一步,我正在考虑安全性并尽可能锁定。因此,我希望设置一个 replication 用户(角色)并让 BDR
export class UserListComponent implements OnInit{ users; constructor(private userService: UserS
我可以使用 Sonata User Bundle 将 FOS 包集成到 sonata Admin 包中。我的登录功能正常。现在我想添加 FOSUserBundle 中的更改密码等功能到 sonata
在 LinkedIn 中创建新应用程序时,我得到 4 个单独的代码: API key 秘钥 OAuth 用户 token OAuth 用户密码 我在 OAuth 流程中使用前两个。 的目的是什么?最后
所以..我几乎解决了所有问题。但现在我要处理另一个问题。我使用了这个连接字符串: SqlConnection con = new SqlConnection(@"Data Source=.\SQLEX
我有一组“用户”和一组“订单”。我想列出每个 user_id 的所有 order_id。 var users = { 0: { user_id: 111, us
我已经为我的Django应用创建了一个用户模型 class User(Model): """ The Authentication model. This contains the u
我被这个问题困住了,找不到解决方案。寻找一些方向。我正在用 laravel 开发一个新的项目,目前正致力于用户认证。我正在使用 Laravels 5.8 身份验证模块。 对密码恢复 View 做了一些
安装后我正在使用ansible配置几台计算机。 为此,我在机器上本地运行 ansible。安装中的“主要”用户通常具有不同的名称。我想将该用户用于诸如 become_user 之类的变量. “主要”用
我正在尝试制作一个运行 syncdb 的批处理文件来创建一个数据库文件,然后使用用户名“admin”和密码“admin”创建一个 super 用户。 到目前为止我的代码: python manage.
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 6 年前。 Improv
我已在 Azure 数据库服务器上设置异地复制。 服务器上运行的数据库之一具有我通过 SSMS 创建的登录名和用户: https://learn.microsoft.com/en-us/azure/s
我有一个 ionic 2 应用程序,正在使用 native FB Login 来检索名称/图片并将其保存到 NativeStorage。流程是我打开WelcomePage、登录并保存数据。从那里,na
这是我的用户身份验证方法: def user_login(request): if request.method == 'POST': username = request.P
我试图获取来自特定用户的所有推文,但是当我迭代在模板中抛出推文时,我得到“User”对象不可迭代 观看次数 tweets = User.objects.get(username__iexact='us
我是一名优秀的程序员,十分优秀!