我正在構建一個新的Angular2應用程序,它將駐留在.NET應用程序平臺內。我的Angular2應用程序應該獲取當前登錄用戶的API調用來獲取數據。我如何獲得userId到我的應用程序。從.NET平臺獲取已登錄的用戶到Angular 2應用程序
回答
由於您沒有明確指定您正在使用的.Net平臺,因此我將假定它是最近的一個 - Asp.Net Core,其身份驗證提供程序爲Asp.Net Identity。
如果您使用默認的Asp.Net Identity模板,您可以簡單地使用基於Cookie的身份驗證來處理您的Web API請求。當您通過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();
}
角2服務的方法來執行登錄
這是從所謂的登錄組件,例如承載登錄表單的組件。
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。
用戶信息的方法服務器端
[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
});
}
獲取在您的服務器端控制器
現在,請求由框架內自動驗證的用戶ID,您可以通過注射它利用Asp.Net身份的UserManager
您控制器以及使用它得到的用戶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 2應用程序的登錄組件。在我的情況下,Angular2應用程序不會有任何登錄組件。它將作爲一個兒童應用程序託管在平臺內。當用戶登錄到平臺時,他應該能夠看到Angular2應用程序的菜單項。一旦我點擊,我的實際Angular2應用程序加載。所以在這裏,爲了加載我的Angular2應用程序,我需要訪問具有認證的REST API。所以我應該能夠獲得在平臺級別使用的用戶標識。 – indra257
Angular 2應用程序是否將api請求發送給同樣服務於主/父級的後端?如果是的話,並且如果您使用的是基於Asp.Net身份Cookie的身份驗證,則您不必在Angular 2應用程序中進行任何身份驗證。如果您可以在原始問題中添加一些關於您的設置的更多細節,那將是非常好的。 – GeorgDangl
是的,它使用相同的api請求。來到最初的問題,在我的angular2應用程序中,我需要傳遞Auth-id(用戶標識)來獲取數據。那麼如何獲得已用於在平臺級別登錄的用戶ID。 – indra257
- 1. 從.NET應用程序登錄到Windows
- 2. .Net用戶登錄程序
- 3. Angular 2獲取應用程序的ViewContainerRef
- 4. 客戶端應用程序獲取已登錄用戶(JAAS)的角色
- 5. 從yii2應用程序獲取WP登錄用戶
- 6. ASP登錄從C#.NET應用程序
- 7. 獲得「平臺應用程序已禁用」從Amazon SNS
- 8. 如何啓用2登錄用戶到我的應用程序?
- 9. 用Angular 2登錄到Auth0
- 10. 獲取UPN或電子郵件登錄的用戶在.NET Web應用程序
- 11. 獲取Windows登錄用戶名ASP .net
- 12. 從DefaultConnection數據庫獲取已登錄/用戶名登錄VB.net 2012 ASP.NET Web窗體應用程序
- 13. 如何獲取用戶登錄到我的應用程序的機器帳戶?
- 14. 獲取登錄J2EE應用程序的用戶信息
- 15. 獲取當前登錄的用戶ID爲Facebook應用程序
- 16. 跨平臺獲取用戶目錄?
- 17. 用戶登錄的Java啓動程序(全平臺)
- 18. 從.net程序登錄到delphi程序
- 19. 從Web應用程序提取登錄的用戶名
- 20. Symfony 2獲取登錄用戶列表
- 21. 從Web應用程序獲取已登錄的Windows客戶端計算機的用戶權限
- 22. 獲取應用程序數據\爲登錄用戶
- 23. 應用程序池標識lightswitch沒有獲取登錄用戶
- 24. 獲取用戶使用asp.net web應用程序登錄到windows的名稱
- 25. 從Windows登錄中獲取用戶名?爲我的揮杆應用程序
- 26. 從.net應用程序登錄到OpenID網站
- 27. 登錄後啓動.Net應用程序
- 28. 登錄.NET 4.5控制檯應用程序:不加載配置
- 29. Android應用程序登錄,在後臺
- 30. 從存儲過程獲取Error_Number()到調用.NET應用程序
在localstorage內成功登錄後保存您的用戶。 – JoeriShoeby
是的,但登錄發生在平臺級別。 – indra257
那麼你在成功登錄後將它保存在哪裏? – JoeriShoeby