Usuário com melhor resposta
AspNet Core Autenticação relacionado com cliente

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?
- Movido welington jrModerator terça-feira, 20 de fevereiro de 2018 15:48 forum mais especifico
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
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!
-
-
-
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.
- Editado Juliano Nunes Silva Oliveira segunda-feira, 19 de fevereiro de 2018 13:43
-
-
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.
-
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.
- Editado Juliano Nunes Silva Oliveira terça-feira, 20 de fevereiro de 2018 17:36
-
-
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
-