Как сохранить пользователь вошел в систему после закрытия браузера - PullRequest
0 голосов
/ 28 января 2019

Каждый раз, когда я закрываю браузер, мне нужно снова войти в это приложение.Он разработан в .NET Core 2.0.Я пытаюсь, чтобы он вошел в систему, как и любой другой обычный сайт.

Я проверил этот пост , что может быть полезно, но так как код сильно отличается от этого приложения, я решилсоздайте этот пост.

Это мой защитный код:

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
using System.Security.Principal;
using System.Text;

namespace Petito.Common
{
    public interface IActivityContext
    {
        string ActivityID { get; }
        IPrincipal User { get; }
    }

    [JsonObject(MemberSerialization = MemberSerialization.Fields)]
    public class ActivityIdentity : IIdentity
    {
        private string _name = null;
        [JsonIgnore()]
        private bool _isAuthenticated = false;
        [JsonIgnore()]
        private string _authenticationType = "";

        public ActivityIdentity()
        {
        }
        public ActivityIdentity(string name) : this(name, false, "")
        {
        }
        internal ActivityIdentity(string name, bool isAuthenticated, string authenticationType)
        {
            this._name = name;
            this._isAuthenticated = isAuthenticated;
            this._authenticationType = authenticationType;
        }

        public string Name { get => _name; }
        public bool IsAuthenticated { get => _isAuthenticated; }
        public string AuthenticationType { get => _authenticationType; }

        public static ActivityIdentity Unathenticated => new ActivityIdentity();

    }
    [JsonObject(MemberSerialization = MemberSerialization.Fields)]
    public class ActivityPrincipal : IPrincipal
    {
        private ActivityIdentity _activityIdentity = null;
        private string[] _roles = null;

        public ActivityPrincipal() : this(ActivityIdentity.Unathenticated, null)
        {

        }

        public ActivityPrincipal(ActivityIdentity activityIdentity, params string[] roles)
        {
            _activityIdentity = activityIdentity;
            _roles = roles;
        } 

        public ActivityIdentity Identity => _activityIdentity;

        IIdentity IPrincipal.Identity => _activityIdentity;

        public bool IsInRole(string role)
        {
            if (_roles != null && _roles.Length > 0)
            {
                return _roles.Contains(role);
            }
            return false;
        }
    }
    [JsonObject(MemberSerialization = MemberSerialization.Fields)]
    public class ActivityContext : IDisposable, IActivityContext
    {
        private string _activityID = Guid.NewGuid().ToString();
        private DateTime _startDate = DateTime.UtcNow;
        private DateTime? _endDate = null;
        private ActivityPrincipal _activityPrincipal = null;

        public ActivityContext() : this(null)
        {
        }
        public ActivityContext(IPrincipal principal)
        {
            _activityPrincipal = Convert(principal);
        }

        private ActivityPrincipal Convert(IPrincipal principal)
        {
            if (principal == null)
            {
                return new ActivityPrincipal();
            }

            var activityPrincipal = principal as ActivityPrincipal;
            if (activityPrincipal != null)
            {
                return activityPrincipal;
            }
            var claimsPrincipal = principal as ClaimsPrincipal;
            if (claimsPrincipal != null)
            {
                var roles = claimsPrincipal.Claims.Select(x => x.Value);
                var p = new ActivityPrincipal(
                    new ActivityIdentity(claimsPrincipal.Identity.Name, claimsPrincipal.Identity.IsAuthenticated, claimsPrincipal.Identity.AuthenticationType) 
                , roles.ToArray()
                );

                return p;
            }

            throw new NotSupportedException($"Converting {principal.GetType()} not supported");
        }

        public void Dispose()
        {
            if (!_endDate.HasValue)
            {
                _endDate = DateTime.UtcNow;
            }
        }

        public string ActivityID { get => _activityID; }
        public DateTime StartDate { get => _startDate; }
        public DateTime? EndDate { get => _endDate; }

        public IPrincipal User
        {
            get
            {
                return _activityPrincipal;
            }
        }

    }
}

Конечно, я все же попытаюсь выяснить, что не так с кодом.Пожалуйста, если вам нужна другая часть кода, кроме той, которую я разместил, дайте мне знать.

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...