Bamos 0 Denunciar post Postado Março 26, 2010 Olá pessoal, já perdi quase o dis todo para uma tarefa que parece simples mas não está funcionando. Estou implementando Membership na minha aplicação que já tem a estrutura pronta, então não quero utilizar o "CreateUserWizard", pois tenho campos que são de outras tabelas do banco da aplicação e eu não quero mexer na interface pronta. A única coisa qu eeu preciso fazer é inserir um usuário via código, mas sempre está retornando null sem dar nenhum erro. Estou fazendo da seguinte maneira, Eu implementei a classe SqlMembershipProvider porque eu customizei algumas coisas como "Password History", então precisei dar um override no método CreateUser desta classe para isso. O código está assim: /***PÁGINA INSERIR USUÁRIO (aspx)****/ StrykerCustomMembershipProvider customProvider = new StrykerCustomMembershipProvider(); MembershipUser mu; MembershipCreateStatus status; mu = customProvider.CreateUser(txtLogin.Text, txtSenha.Text, txtEmail.Text, "", "", true, null, out status); /*****CustomSQLMembershipProvider*******/ public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status) { MembershipUser mu; mu = base.CreateUser(username, password, email, passwordQuestion, passwordAnswer, isApproved, providerUserKey, out status); if (status != MembershipCreateStatus.Success) return mu; //Only insert the password row if the user was created try { InsertHistoryRow(username, password); return mu; } catch { //Attempt to cleanup after a creation failure base.DeleteUser(username, true); status = MembershipCreateStatus.ProviderError; return null; } } Este método base.CreateUser(...) sempre retorna null, não sei porque! Deixando claro que eu estou passando valor null para o "ProviderUserKey", da mesma forma que o wizard faz. Espero que alguém possa me ajudar, abraços! Compartilhar este post Link para o post Compartilhar em outros sites
quintelab 91 Denunciar post Postado Março 26, 2010 try { InsertHistoryRow(username, password); return mu; } catch { //Attempt to cleanup after a creation failure base.DeleteUser(username, true); status = MembershipCreateStatus.ProviderError; return null; } Da uma olhada no seu código, olha o return null dentro do catch. Comenta o try, catch que conseguirá ver o erro. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Bamos 0 Denunciar post Postado Março 29, 2010 Olá, primeiramente obrigado pela resposta! Eu fiz isso, mas o problema é que quando entra no Try,Catch o "mu" já está null. Eu debuguei a execução de: mu = base.CreateUser(username, password, email, passwordQuestion, passwordAnswer, isApproved, providerUserKey, out status) e quando pego o valor de mu ele já devolve null. Executa até rapido, parece que nem acessa o banco de dados, mas também não dá erro nenhum. Eu só consigo utilizar este metodo override quando eu chamo ele à partir do "CreateUserWizard". Pode ser que tenha mais alguma coisa que deve ser feito para este meu caso e eu não estou sabendo. Obrigado! try { InsertHistoryRow(username, password); return mu; } catch { //Attempt to cleanup after a creation failure base.DeleteUser(username, true); status = MembershipCreateStatus.ProviderError; return null; } Da uma olhada no seu código, olha o return null dentro do catch. Comenta o try, catch que conseguirá ver o erro. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites