none
AspNet Core Autenticação relacionado com cliente RRS feed

  • Pergunta

  • Olá boa tarde Pessoal.

    comecei estudar o asp net core 2 recentemente.

    criei um novo projeto com autenticação individual (gerada automaticamente) e fiz então um crud de cadastro de clientes.

    o crud está funcionado. agora gostaria de saber como posso estar juntando esse cadastro de cliente com a autenticação?

    basicamente o cliente vai se cadastrar no site e ele vai ter a autenticação.

    tenho que criar uma coluna no model do cliente chamado user_id e inserir o id do usuario logado / criado?

    ou teria algo mais avançado / seguro que devo fazer?

    quinta-feira, 8 de fevereiro de 2018 16:53

Respostas

  • Na sua classe Cliente tente assim:

    using Microsoft.AspNetCore.Identity;
    using System.ComponentModel.DataAnnotations;
    
    namespace AppCommerce.Models
    {
        public class Cliente
        {
            public int ClienteId { get; set; }
    
            // user ID from AspNet User table
            public string OwnerId {get;set;}
            
            public ApplicationUser Owner { get; set; }
    
            public string ClienteStatus { get; set; }
    
            
            [Required(ErrorMessage="Informe o {0}")]
            [Display(Name="Nome Completo")]
            [StringLength(100, ErrorMessage="Máximo 100 Caracteres")]
            public string Nome { get; set; }
    
            [Required(ErrorMessage="Informe o {0}")]
            [Display(Name="Endereço")]
            [StringLength(100, ErrorMessage="Máximo 100 Caracteres")]
            public string Endereco { get; set; }
    
            [StringLength(10, ErrorMessage="Máximo 10 Caracteres")]
            public string Numero { get; set; }
    
            [Required(ErrorMessage="Informe o {0}")]
            [StringLength(50, ErrorMessage="Máximo 50 Caracteres")]
            public string Complemento { get; set; }
    
            [Required(ErrorMessage="Informe o {0}")]
            [StringLength(10, ErrorMessage="Máximo 10 Caracteres")]
            public string Cep { get; set; }
    
            [Required(ErrorMessage="Informe o {0}")]
            [StringLength(2, MinimumLength=2, ErrorMessage="{0} deve conter 2 Caracteres")]
            public string Estado { get; set; }
    
            [Required(ErrorMessage="Informe o {0}")]
            [StringLength(100, ErrorMessage="Máximo 100 caracteres")]
            public string Cidade { get; set; }
    
            [Required]
            [StringLength(15, ErrorMessage="Máximo 15 caracteres")]
            [DataType(DataType.PhoneNumber)]
            public string Telefone { get; set; }
    
            [Required]
            [StringLength(150, ErrorMessage="Máximo 150 caracteres")]
            [EmailAddress(ErrorMessage="Informe um e-mail válido")]
            [DataType(DataType.EmailAddress)]
            public string Email { get; set; }
            
        }
        public enum ClienteStatus{
            Novo,
            Aprovado,
            Recusado
            
        }
    }


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    • Marcado como Resposta DevMaicon terça-feira, 20 de fevereiro de 2018 22:35
    terça-feira, 20 de fevereiro de 2018 21:22

Todas as Respostas

  • criei uma propriedade no model do cliente chamado OwnerId

    ao fazer Registro ou Login na autenticação é direcionado para a view de Cadastro do cliente.

    Se o usuário salvar os seus dados, o controller busca o usuário logado e insere nesse campo OwnerId

    Mas na tabela do BD o campo OwnerId não ficou como chave estrangeira.

    seria o certo fazer isso? Pois funcionou bem!



    domingo, 11 de fevereiro de 2018 14:13
  • Olá Michaeell

    Conseguiu resolver?

     

    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    Rafael Almeida
    Microsoft Developer .NET
    Microsoft Certified Professional
    Development Leader at JAMSOFT Informática
    Email: ralms@ralms.net
    Blog -  GitHub  -  LinkedIn -  Twitter

    terça-feira, 13 de fevereiro de 2018 14:16
  • aparentemente funciona. mas queria saber se é correto fazer isso?

    ou se tem alguma documentação que explique isso, pois não encontrei nada disso

    segunda-feira, 19 de fevereiro de 2018 13:38
  • O único problema que vejo é não ter criado a chave estrangeira para o OwnerId, pois isso pode acarretar em:

    • falta de integridade referencial (tabela com Cliente apontando para um usuário que foi removido)
    • menor performance em consultas que buscam o cliente pelo OwnerId (devido a também falta de um índice para esta coluna)

    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.


    segunda-feira, 19 de fevereiro de 2018 13:43
  • sim também acho.

    mas como posso estar fazendo relacionando / criando essa chave estrangeira? 

    segunda-feira, 19 de fevereiro de 2018 20:48
  • no modelo de Cliente coloquei também a seguinte propriedade virtual

    public virtual IdentityUser<string> IdentityUser { get; set; }

    executei o Migration, mas deu o seguinte erro:

    A key cannot be configured on 'ApplicationUser' because it is a derived type. The key must be configured on the root type 'IdentityUser<string>'. If you did not intend for 'IdentityUser<string>' to be included in the model, ensure that it is not included in a DbSet property on your context, referenced in a configuration call to ModelBuilder, or referenced from a navigation property on a type that is included in the model.


    terça-feira, 20 de fevereiro de 2018 11:43
  • Você criou seu projeto usando o template padrão (escolhendo Individual User Accounts na janela de diálogo de novo projeto)? Se for um projeto de estudo, pode compartilhar o código?

    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.


    terça-feira, 20 de fevereiro de 2018 17:35
  • segue o modelo Cliente no git

    https://github.com/michaelgomes/AppCommerce/blob/master/Models/Cliente.cs

    terça-feira, 20 de fevereiro de 2018 20:46
  • Na sua classe Cliente tente assim:

    using Microsoft.AspNetCore.Identity;
    using System.ComponentModel.DataAnnotations;
    
    namespace AppCommerce.Models
    {
        public class Cliente
        {
            public int ClienteId { get; set; }
    
            // user ID from AspNet User table
            public string OwnerId {get;set;}
            
            public ApplicationUser Owner { get; set; }
    
            public string ClienteStatus { get; set; }
    
            
            [Required(ErrorMessage="Informe o {0}")]
            [Display(Name="Nome Completo")]
            [StringLength(100, ErrorMessage="Máximo 100 Caracteres")]
            public string Nome { get; set; }
    
            [Required(ErrorMessage="Informe o {0}")]
            [Display(Name="Endereço")]
            [StringLength(100, ErrorMessage="Máximo 100 Caracteres")]
            public string Endereco { get; set; }
    
            [StringLength(10, ErrorMessage="Máximo 10 Caracteres")]
            public string Numero { get; set; }
    
            [Required(ErrorMessage="Informe o {0}")]
            [StringLength(50, ErrorMessage="Máximo 50 Caracteres")]
            public string Complemento { get; set; }
    
            [Required(ErrorMessage="Informe o {0}")]
            [StringLength(10, ErrorMessage="Máximo 10 Caracteres")]
            public string Cep { get; set; }
    
            [Required(ErrorMessage="Informe o {0}")]
            [StringLength(2, MinimumLength=2, ErrorMessage="{0} deve conter 2 Caracteres")]
            public string Estado { get; set; }
    
            [Required(ErrorMessage="Informe o {0}")]
            [StringLength(100, ErrorMessage="Máximo 100 caracteres")]
            public string Cidade { get; set; }
    
            [Required]
            [StringLength(15, ErrorMessage="Máximo 15 caracteres")]
            [DataType(DataType.PhoneNumber)]
            public string Telefone { get; set; }
    
            [Required]
            [StringLength(150, ErrorMessage="Máximo 150 caracteres")]
            [EmailAddress(ErrorMessage="Informe um e-mail válido")]
            [DataType(DataType.EmailAddress)]
            public string Email { get; set; }
            
        }
        public enum ClienteStatus{
            Novo,
            Aprovado,
            Recusado
            
        }
    }


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    • Marcado como Resposta DevMaicon terça-feira, 20 de fevereiro de 2018 22:35
    terça-feira, 20 de fevereiro de 2018 21:22
  • funcionou perfeitamente. valew mesmo
    terça-feira, 20 de fevereiro de 2018 22:35