دسته بندی ها
21:02 1400/01/13

نحوه احراز هویت در Blazor Server App

مشخصات سوال کننده :
کاربر : deltafk     امتیاز کاربر : 5     رتبه کاربر : 110
دسته بندی : Blazor

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 5170
پاسخ دهنده : fateme 01:23 1400/01/14

توی Blazor هم برای بحث احراز هویت همه کتابخانه ها و کامپوننت های مورد نیاز تعبیه شده. اگر Razor Page شما نیاز به احراز هویت داره کافیه از تگ زیر استفاده کنید :

<AuthorizeView>
    <Authorized>
    </Authorized>
</AuthorizeView>

به مثال زیر توجه کنید :

 

<AuthorizeView>
    <Authorized>
        <a href="Identity/Account/Manage" class="text-white-50">Hello, @context.User.Identity.Name!</a>
        <form method="post" action="Identity/Account/LogOut">
            <button type="submit" class="text-white-50 nav-link btn btn-link">Log out</button>
        </form>
    </Authorized>
    <NotAuthorized>
        <a href="Identity/Account/Register" class="text-white-50">Register</a>
        <a href="Identity/Account/Login" class="text-white-50">Log in</a>
    </NotAuthorized>
</AuthorizeView>

در مثال بالا مشخص کردیم اگر کاربر لاگین شده بود کدهایی که در بخش Authorized هست رو نمایش بده و در غیر این صورت کدهای بخش NotAuthorized رو نمایش بده.

 

استفاده از کلاس SignInManager در Blazor

شما اگر نیاز به استفاده از کلاس های Identity دارید می تونید از تزریق وابستگی در Razor Page ها استفاده کنید.

 

@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager

<div>Hello</div>

@code{


}

بنابراین همون طوری که می بینید علاوه بر اینکه امکان استفاده از کلاس های Identity در blazor فراهم هست کامپوننت های دیگه ای هم برای استفاده وجود داره.

ویرایش شده در شنبه 14 فروردین 1400 ساعت 18:30:02
به این پاسخ امتیاز بدهید    1
امتیاز: 1617 رتبه: 2
پاسخ دهنده : deltafk 09:36 1400/01/14

با تشکر از پاسخ شما
اما طبق گفته ماکروسافت در Blazor دیگر signInmanager کار نمیکند و در صورت اجرا بشکلی که شما اشاره کردید پیام خطای عدم رجیستر بودت سرویس ظاهر میگردد-
مشکل فقط اینجاست چطور میتونیم یک کاربر را Authenticate کنیم و به سیستم لاگین کند و Isauthenticate آن True شود

به این پاسخ امتیاز بدهید    0
امتیاز: 5 رتبه: 110
1 نظر
fateme : من خودم از signInManager توی پروژه ام استفاده می کنم. مایکروسافت کجا گفته که کار نمیکنه ؟ لینکشو بدید

امتیاز کاربر : 1617   رتبه کاربر : 2   تاریخ ثبت : 09:43 1400/01/14
پاسخ دهنده : deltafk 10:19 1400/01/14

این لینک

 
SignInManager<TUser> and UserManager<TUser> aren't supported in Razor components.
ویرایش شده در دوشنبه 31 خرداد 1400 ساعت 12:53:26
به این پاسخ امتیاز بدهید    1
امتیاز: 5 رتبه: 110
پاسخ دهنده : deltafk 16:42 1400/01/14

حق با شما بود یک اشتباه در فایل Startup کرده بودم و بجای استفاده از 

services.AddDefaultIdentity<IdentityUser>

از 

services.AddDefaultIdentity<ApplicationUser>

استفاده کرده بودم و همین باعث شده بود اختلال بوجود بیاید.

ویرایش شده در شنبه 14 فروردین 1400 ساعت 18:32:04
به این پاسخ امتیاز بدهید    0
امتیاز: 5 رتبه: 110
پاسخ دهنده : davud 12:36 1400/03/31

سلام، طبق گفته شما تو این حالت وقتی تزریق وابستگی داخل کامپوننت ایجاد میشه باید از طریق متد زیر به کاربر لاگین شده دسترسی داشت:

var user = await userManager.GetUserAsync(User);

در حالیکه اینطور نیست! یعنی به (User) ایراد میگیره، ایراد کار کجاست؟

البته من از طریق کامپوننت بلیزور تونستم Register رو پیاده سازی کنم ولی هر کاری کردم نتونستم لاگین رو پیاده سازی کنم!!! و کلا تو پیاده سازی آیدنتیتی در بلیزور (تغییر پسورد، تغییر مشخصات کاربر و ... ) به مشکل برخوردم

ممنون میشم کمکم کنین.

ویرایش شده در دوشنبه 31 خرداد 1400 ساعت 12:53:56
به این پاسخ امتیاز بدهید    0
امتیاز: ‎−4 رتبه: 7093
2 نظر
hamid_b : طبق گفته کی دقیقا ؟؟

امتیاز کاربر : 510   رتبه کاربر : 4   تاریخ ثبت : 12:55 1400/03/31
davud : Fateme: بنابراین همون طوری که می بینید علاوه بر اینکه امکان استفاده از کلاس های Identity در blazor فراهم هست کامپوننت های دیگه ای هم برای استفاده وجود داره.

امتیاز کاربر : ‎−4   رتبه کاربر : 7093   تاریخ ثبت : 01:29 1400/03/31
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود