Пример #1
0
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl = returnUrl ?? Url.Content("~/");
            if (ModelState.IsValid)
            {
                var user = new User {
                    UserName = Input.Email, Email = Input.Email
                };
                var result = await _userManager.CreateAsync(user, Input.Password);

                if (result.Succeeded)
                {
                    // 检查是否有管理员用户,如果没有,第一个注册的就是管理员用户
                    if (Common.HasAdmin == false)
                    {
                        await _userManager.AddToRoleAsync(user, Final.Yuri_Admin);

                        Common.HasAdmin = true;
                    }
                    else
                    {
                        // 给用户设置初始权限 Yuri一号权限
                        await _userManager.AddToRoleAsync(user, Final.Yuri_Yuri1);
                    }

                    _logger.LogInformation("User created a new account with password.");

                    // 这块是进行邮箱验证的代码
                    // TODO:我需要对邮箱验证进行配置
                    //var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
                    //var callbackUrl = Url.Page(
                    //    "/Account/ConfirmEmail",
                    //    pageHandler: null,
                    //    values: new { userId = user.Id, code },
                    //    protocol: Request.Scheme);

                    //await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
                    //    $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");

                    await _signInManager.SignInAsync(user, isPersistent : false);

                    return(LocalRedirect(returnUrl));
                }
                foreach (var error in result.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
            }

            // If we got this far, something failed, redisplay form
            return(Page());
        }
Пример #2
0
        private async Task LoadSharedKeyAndQrCodeUriAsync(User user)
        {
            // Load the authenticator key & QR code URI to display on the form
            var unformattedKey = await _userManager.GetAuthenticatorKeyAsync(user);

            if (string.IsNullOrEmpty(unformattedKey))
            {
                await _userManager.ResetAuthenticatorKeyAsync(user);

                unformattedKey = await _userManager.GetAuthenticatorKeyAsync(user);
            }

            SharedKey = FormatKey(unformattedKey);

            var email = await _userManager.GetEmailAsync(user);

            AuthenticatorUri = GenerateQrCodeUri(email, unformattedKey);
        }
Пример #3
0
        public async Task <IActionResult> OnPostConfirmationAsync(string returnUrl = null)
        {
            returnUrl = returnUrl ?? Url.Content("~/");
            // Get the information about the user from the external login provider
            var info = await _signInManager.GetExternalLoginInfoAsync();

            if (info == null)
            {
                ErrorMessage = "Error loading external login information during confirmation.";
                return(RedirectToPage("./Login", new { ReturnUrl = returnUrl }));
            }

            if (ModelState.IsValid)
            {
                var user = new User {
                    UserName = Input.Email, Email = Input.Email
                };
                var result = await _userManager.CreateAsync(user);

                if (result.Succeeded)
                {
                    result = await _userManager.AddLoginAsync(user, info);

                    if (result.Succeeded)
                    {
                        await _signInManager.SignInAsync(user, isPersistent : false);

                        _logger.LogInformation("User created an account using {Name} provider.", info.LoginProvider);
                        return(LocalRedirect(returnUrl));
                    }
                }
                foreach (var error in result.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
            }

            LoginProvider = info.LoginProvider;
            ReturnUrl     = returnUrl;
            return(Page());
        }
Пример #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="File">上传的文件</param>
        /// <param name="ReadUser">上传文件谁可以读取?</param>
        /// <returns></returns>
        public async Task <ReturnType> FileUpLoadToAliyunOSSAsync(IFormFile File, User User)
        {
            if (File == null)
            {
                throw new ErrorException(1, "文件为空");
            }
            IPicProcess PicProcess = new ImageProcessTwo();

            //这次文件保存使用了阿里云OSS,所以,
            //主机内只保存缩略图即可,只有用户需要大图时,才将完整图片链接显示出来

            //检查文件类型
            string Type = File.ContentType;

            if (PicProcess.FileTypeCheck(Type))
            {
                // 进行文件名处理,得到文件名
                string FileName = PicProcess.CreateFileName(File.FileName);
                // 生成各个文件的路径
                var FilePath_Image       = Final.FilePath_Image + FileName;       //大缩略图保存
                var FilePath_Image_Thumb = Final.FilePath_Image_Thumb + FileName; //缩略图保存位置

                string TrueFileName;                                              //阿里云OSS的文件Key(包含文件夹的)
                var    IsPublic = false;                                          //是否是公开读取的文件(默认不是)
                try
                {
                    using
                    (
                        Stream stream_img = new FileStream(FilePath_Image, FileMode.Create),
                        stream_img_thumb = new FileStream(FilePath_Image_Thumb, FileMode.Create),
                        stream = File.OpenReadStream()
                    )
                    {
                        FileUpLoad         fileUpLoad         = new FileUpLoad();
                        AliyunImageProcess aliyunImageProcess = new AliyunImageProcess();

                        TrueFileName = fileUpLoad.CreateFileName(FileName, IsPublic);
                        //上传到阿里云OSS
                        fileUpLoad.AliyunFileUpLoad(stream, TrueFileName);
                        //下载缩略图
                        var Process   = "image/auto-orient,1/resize,m_fill,w_400,h_400/quality,q_80/format,jpg";
                        var ossObject = aliyunImageProcess.Process(TrueFileName, Process);
                        await ossObject.Content.CopyToAsync(stream_img_thumb);

                        //下载缩略图的大图
                        var ProcessBig   = "image/auto-orient,1/resize,m_lfit,w_600/quality,q_90/format,jpg";
                        var ossObjectBig = aliyunImageProcess.Process(TrueFileName, ProcessBig);
                        await ossObjectBig.Content.CopyToAsync(stream_img);
                    }

                    MoeTools moeTools = new MoeTools();
                    // 生成Image数据
                    var ReadUsers = moeTools.GetImage_ReadUsers(Public: false, Users: User.Id);

                    Images Image = new Images
                    {
                        ImageName   = File.FileName,
                        ImagePath   = FilePath_Image,//实际大图缩略图的存储位置
                        ReadUsers   = ReadUsers,
                        UpLoadUsers = User,
                        ContentType = Type,
                        StaticPath  = TrueFileName//阿里云Oss的存储路径(key)
                    };

                    Images = Image;

                    return(ReturnType.FileUpLoadOK);
                }
                catch (Exception e)
                {
#if DEBUG
                    Console.WriteLine(e);
#endif
                    //上传文件一般不会发生异常,阿里云的服务器,也不需要对文件类型进行检查了
                    //万一出现异常情况的话,
                    //就删除创建的缩略图文件
                    System.IO.File.Delete(FilePath_Image);           // 删除源文件
                    System.IO.File.Delete(FilePath_Image_Thumb);     // 删除预览图文件

                    throw new ErrorException(2, "发生错误,请稍后重试");       // 抛出异常,到异常页面
                }
            }
            else
            {
                return(ReturnType.AdminLog);
            }
        }