دسته بندی ها
09:55 1401/06/13

ورود هر کاربر روی فقط یک مرورگر در Asp.Net Core

مشخصات سوال کننده :
کاربر : MahdiSharifiAspNetCore     امتیاز کاربر : 3     رتبه کاربر : 136
دسته بندی : Asp.net Core

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 2650
هوش مصنوعی

پاسخ هوش مصنوعی

برای محدود کردن ورود هر کاربر به یک مرورگر در Asp.Net Core به جای استفاده از کوکی یا سشن، می توانید از توکن های دسترسی (Access Tokens) استفاده کنید. در این روش، پس از لاگین کاربر، یک توکن منحصر به فرد برای آن کاربر و مرورگر تولید می شود و این توکن باید برای هر درخواست ارسال شود. همچنین اطلاعات مربوط به توکن ها می تواند در پایگاه داده ذخیره شود و هنگام ورود مجدد کاربر بررسی شود.

در زیر یک روش ساده برای پیاده سازی این کار آورده شده است:

public class UserSessionService
{
    private readonly ApplicationDbContext _context;

    public UserSessionService(ApplicationDbContext context)
    {
        _context = context;
    }

    public async Task CreateSessionAsync(string userId)
    {
        var existingSession = await _context.UserSessions
            .FirstOrDefaultAsync(s => s.UserId == userId);

        if (existingSession != null)
        {
            // در صورت وجود سشن قبلی، آن را حذف می کنیم
            _context.UserSessions.Remove(existingSession);
            await _context.SaveChangesAsync();
        }

        // توکن جدید برای کاربر تولید می کنیم
        string token = Guid.NewGuid().ToString();
        var newSession = new UserSession
        {
            UserId = userId,
            Token = token,
            CreatedAt = DateTime.UtcNow
        };

        await _context.UserSessions.AddAsync(newSession);
        await _context.SaveChangesAsync();

        return token;
    }

    public async Task ValidateSessionAsync(string userId, string token)
    {
        var session = await _context.UserSessions
            .FirstOrDefaultAsync(s => s.UserId == userId && s.Token == token);

        return session != null;
    }
}

شما باید جدولی در پایگاه داده برای ذخیره سازی سشن های کاربر ایجاد کنید:

public class UserSession
{
    public int Id { get; set; }
    public string UserId { get; set; }
    public string Token { get; set; }
    public DateTime CreatedAt { get; set; }
}

سپس در هنگام ورود کاربر، از متد CreateSessionAsync استفاده کنید تا توکن جدیدی برای کاربر تولید و ذخیره شود و درخواستی که به سرور ارسال می شود باید توکن را به همراه داشته باشد. با استفاده از متد ValidateSessionAsync می توانید بررسی کنید که آیا توکن معتبر است یا خیر.

در این روش، هر کاربر فقط می تواند با یک مرورگر و توکن منحصر به فرد وارد سیستم شود و در ورودهای جدید، سشن های قبلی به طور خودکار حذف می شوند.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : saedbfd 16:28 1401/06/13

برای انجام این کار یه سری پیشنهاداتی هست که باید با توجه به پروژتون انجام بدید. لینک زیر رو مطالعه کنید.

جلوگیری از ورود همزمان (لاگین) چند کاربر با یک نام کاربری در Asp.net Core

به این پاسخ امتیاز بدهید    0
امتیاز: 1664 رتبه: 1
1 نظر
MahdiSharifiAspNetCore : خوب مشکل ما این هست که کاربران ممکنه اکانت خودشون رو بفروشن ما یک چیزی نیاز داریم که وابسته به خود کاربر نباشه به صورت اتوماتیک توسط خود سیستم انجام بشه نه پیامک توی این لینک هم پیام و کوکی استفاده شده بود

امتیاز کاربر : 3   رتبه کاربر : 136   تاریخ ثبت : 05:53 1401/06/13
پاسخ دهنده : hamid_b 17:27 1401/06/14

می تونید از JWT استفاده کنید. در این روش برای لاگین یک Token ایجاد می شود. شما کنترل کنید تا زمانی که توکن فعال هست دیگه کسی نتونه لاگین انجام بده. البته این جمله بنده خیلی کلی هست و باید در موردش جستجو کنید.

ابزارهایی مثل Azure هم این امکان رو برای شما فراهم میکنن ولی متاسفانه سرویس دهی در ایران ندارن.

لینک زیر هم در این مورد یه سری کد نوشته

prevent multiple login in asp.net core 2

 

ویرایش شده در دوشنبه 14 شهریور 1401 ساعت 17:27:20
به این پاسخ امتیاز بدهید    0
امتیاز: 518 رتبه: 4
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود