• Java spring security можно ли в место логина авторизовывать по номеру телефона?

    @seeyoga Автор вопроса
    Может кому то поможет. В конфигурации можно переопределить поля по которое будет парситься из отправленой формы. Нужно добавть параметр

    usernameParameter("phone")


    Пример конфигурации
    package com.mekenim.callboard.config;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
    import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
    import org.springframework.security.crypto.password.NoOpPasswordEncoder;
    
    import javax.sql.DataSource;
    
    @Configuration
    @EnableWebSecurity
    public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    
        @Autowired
        private DataSource dataSource;
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                    .authorizeRequests()
                        .antMatchers("/", "/card/{id}","/subcategory/{id}","/category/{categoryId}","/registration","/confirm-phone-number").permitAll()
                        .anyRequest().authenticated()
                    .and()
                        .formLogin()
                        .usernameParameter("phone")
                        .loginPage("/login")
                        .permitAll()
                    .and()
                        .logout()
                        .permitAll();
        }
    
        @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
            auth.jdbcAuthentication()
                    .dataSource(dataSource)
                    .passwordEncoder(NoOpPasswordEncoder.getInstance())
                    .usersByUsernameQuery("select phone, password, activate from user_tab where phone = ?")
                    .authoritiesByUsernameQuery("select u.phone, ur.roles from user_tab u inner join user_role ur on u.id = ur.user_id where u.phone=?" );
        }
    }
    Ответ написан
    Комментировать
  • Как Изменить дефолтный сериалайзер Djoser?

    @seeyoga Автор вопроса
    Нашел ответ в документации

    spoiler
    DJOSER = {
        'SERIALIZERS': {
            'user': 'students_moscow.serializers.UserCastomSerializer',
            'current_user': 'students_moscow.serializers.UserCastomSerializer',
            'user_create': 'students_moscow.serializers.UserCreateSerializer',
        },
    
    
    }
    Ответ написан
    Комментировать