精华内容
下载资源
问答
  • 主要介绍了mpvue网易云短信接口实现小程序短信登录的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 主要介绍了javaweb项目如何实现手机短信登录,手机号登录在现在的项目中用的场景非常多,实现起来也不难,今天我们就一起来通过演示实现登录过程,需要的朋友可以参考下
  • 主要为大家详细介绍了小程序实现短信登录倒计时,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 完整版企业级SpringSecurity视频,短信登录,qq登录,微信登录。使用的是SpringBoot。很新。
  • 仿mob短信登录选择国家地区
  • 网站使用用户名密码登录很简单,直接进库比...就跟csdn用短信登录一样,利用第三方接口实现短信验证功能,用户是如何利用验证码登录站点的,第三方接口与站点数据库交互的逻辑流程是什么?比如用户名,验证信息什么的。
  • 安装短信登录 傻妞机器人安装 接下来打开手机登录你的机器人QQ 给自己发送(机器人给机器人发送) 重启傻妞 傻妞青龙任务系列 需要挺高的配置,1核2G的服务器带不动的,最低要2核4G配置 想要尝试的,可以买个9...
    展开全文
  • javaweb项目中实现手机短信登录 https://blog.csdn.net/weixin_38008100/article/details/81570392

    javaweb项目中实现手机短信登录

    https://blog.csdn.net/weixin_38008100/article/details/81570392

    展开全文
  • 这次我们接着讲讲 Facebook中的一个分支SDK,短信验证SDK AccountKit的登录问题,由于其步骤和上一篇差不多,我们这里就不过多说具体步骤了直接上代码:同理要用我们自己的按钮实现短信登录,这个是点击事件的方法:...

    上一篇Android SDK接入之Facebook 登录SDK

    讲到了android Facebook 登录SDK的接入,这次我们接着讲讲 Facebook中的一个分支SDK,短信验证SDK AccountKit的登录问题,由于其步骤和上一篇差不多,我们这里就不过多说具体步骤了直接上代码:

    同理要用我们自己的按钮实现短信登录,这个是点击事件的方法:

    /**
         * accountKit登录
         */
        private void onLogin() {
            final Intent intent = new Intent(this, AccountKitActivity.class);
            AccountKitConfiguration.AccountKitConfigurationBuilder configurationBuilder =
                    new AccountKitConfiguration.AccountKitConfigurationBuilder(
                            LoginType.PHONE,
                            AccountKitActivity.ResponseType.TOKEN);
            configurationBuilder.setTheme(R.style.AppLoginTheme_Bicycle1);
            intent.putExtra(
                    AccountKitActivity.ACCOUNT_KIT_ACTIVITY_CONFIGURATION,
                    configurationBuilder.build());
            startActivityForResult(intent, APP_REQUEST_CODE);
    
        }

    因为AccountKit分为短信验证和邮箱验证,我们这里用的是短信验证,可以看到我们的LoginType是PHONE,也可改为邮箱Email;后面的一个参数也是可选的,token代表的是返回的验证方式是一串token字符串,如果改为code的话,返回的就是一串数字。

    点击按钮后会弹出AccountKit自己的界面,然后输入手机号,验证码登录完成后返回,返回信息可以在AccountKit界面关闭后我们自己的Activity中的onResume方法中获取:

    @Override
        protected void onResume() {
            super.onResume();
            AccountKit.getCurrentAccount(new AccountKitCallback<Account>() {
                @Override
                public void onSuccess(final Account account) {
                    accountKitToken = AccountKit.getCurrentAccessToken().getToken();
                    accountKitId = account.getId();
                    accountKitPhone = account.getPhoneNumber() + "";
                }
    
                @Override
                public void onError(final AccountKitError error) {
                    Log.e(TAG, "accountKitError" + error.getUserFacingMessage()+"---"+error.toString()+"---"+error.describeContents()+"---"+error.getDetailErrorCode()+"---"+error.getErrorType());
                }
            });
        }

    核心代码就是这些了,其他的可以参考官方文档中的内容。



    展开全文
  • Spring Security实现短信登录

    千次阅读 2019-11-18 10:47:27
    文章目录一、理论说明1.1 用户名密码登录逻辑1.2 短信验证码登录逻辑二、代码实战2.1 SmsAuthenticationToken2.2 SmsAuthenticationFilter2.3 SmsAuthenticationProviderhardcode的方式来模拟手机号查询用户信息2.4 ...


    为了省去与本篇主题无关的代码,短信验证码只是一个模拟。如果你需要具体的实际例子,在下面的源码链接中除了包括每一章的代码外,还包括从头到尾的完整整合代码,方便大家参考学习。

    一、理论说明

    在开始编码前,先理解下短信验证码的实现流程。如果你能对《Spring Security认证过程》这篇文章有一定的了解的话,那么这篇文章的学习你会轻松许多。

    1.1 用户名密码登录逻辑

    废话不多说,在上一篇文章中,以标准的用户名密码登录为例,讲解了整个认证流程。大致流程如下:

    先进入 UsernamePasswordAuthenticationFilter 中,根据输入的用户名和密码信息,构造出一个暂时没有鉴权的 UsernamePasswordAuthenticationToken,并将 UsernamePasswordAuthenticationToken交给 AuthenticationManager 处理。
    AuthenticationManager本身并不做验证处理,他通过 for-each 遍历找到符合当前登录方式的一个 AuthenticationProvider,并交给它进行验证处理,对于用户名密码登录方式,这个 Provider 就是 DaoAuthenticationProvider
    在这个 Provider中进行一系列的验证处理,如果验证通过,就会重新构造一个添加了鉴权的 UsernamePasswordAuthenticationToken,并将这个 token 传回到 UsernamePasswordAuthenticationFilter 中。
    在该 Filter 的父类 AbstractAuthenticationProcessingFilter 中,会根据上一步验证的结果,跳转到 successHandler或者是failureHandler

    在这里插入图片描述

    1.2 短信验证码登录逻辑

    我们可以仿照用户名密码登录的逻辑,来实现短信验证码的登陆逻辑。

    用户名密码登录有个 UsernamePasswordAuthenticationFilter,我们搞一个 SmsAuthenticationFilter,代码粘过来改一改。
    用户名密码登录需要 UsernamePasswordAuthenticationToken,我们搞一个 SmsAuthenticationToken,代码粘过来改一改。
    用户名密码登录需要 DaoAuthenticationProvider,我们模仿它也 implenments AuthenticationProvider,叫做 SmsAuthenticationProvider
    在这里插入图片描述
    我们自己搞了上面三个类以后,想要实现的效果如上图所示。当我们使用短信验证码登录的时候:

    1. 先经过SmsAuthenticationFilter ,构造一个没有鉴权的 SmsAuthenticationToken,然后交给
      AuthenticationManager处理。
    2. AuthenticationManager通过 for-each 挑选出一个合适的 provider进行处理,当然我们希望这个
      provider要是 SmsAuthenticationProvider
    3. 验证通过后,重新构造一个有鉴权的 SmsAuthenticationToken,并返回给
      SmsAuthenticationFilter
      4.filter 根据上一步的验证结果,跳转到成功或者失败的处理逻辑。

    二、代码实战

    2.1 SmsAuthenticationToken

    首先我们编写 SmsAuthenticationToken,这里直接参考 UsernamePasswordAuthenticationToken源码,直接粘过来,改一改

    步骤:

    1. principal原本代表用户名,这里改成mobile,代表了手机号码。
    2. credentials 原本代码密码,短信登录用不到,直接删掉。
    3. SmsCodeAuthenticationToken() 两个构造方法一个是构造没有鉴权的,一个是构造有鉴权的。
    4. 剩下的几个方法去除无用属性即可。
    import org.springframework.security.authentication.AbstractAuthenticationToken;
    import org.springframework.security.core.GrantedAuthority;
    import org.springframework.security.core.SpringSecurityCoreVersion;
    
    import java.util.Collection;
    
    /**
     * 短信登录 AuthenticationToken,模仿 UsernamePasswordAuthenticationToken 实现
     */
    public class SmsCodeAuthenticationToken extends AbstractAuthenticationToken {
    
        private static final long serialVersionUID = SpringSecurityCoreVersion.SERIAL_VERSION_UID;
    
        /**
         * 在 UsernamePasswordAuthenticationToken 中该字段代表登录的用户名,
         * 在这里就代表登录的手机号码
         */
        private final Object principal; //存放认证信息。
    
        /**
         * 构建一个没有鉴权的 SmsCodeAuthenticationToken
         */
         //mobile:表示手机号。
        public SmsCodeAuthenticationToken(String mobile) {
            super(null);
            this.principal = mobile;
            setAuthenticated(false);
        }
    
        /**
         * 构建拥有鉴权的 SmsCodeAuthenticationToken
         */
        public SmsCodeAuthenticationToken(Object principal, Collection<? extends GrantedAuthority> authorities) {
            super(authorities);
            this.principal = principal;
            // must use super, as we override
            super.setAuthenticated(true);
        }
    
        @Override
        public Object getCredentials() {
            return null;
        }
    
        @Override
        public Object getPrincipal() {
            return this.principal;
        }
    
        @Override
        public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException {
            if (isAuthenticated) {
                throw new IllegalArgumentException(
                        "Cannot set this token to trusted - use constructor which takes a GrantedAuthority list instead");
            }
    
            super.setAuthenticated(false);
        }
    
        @Override
        public void eraseCredentials() {
            super.eraseCredentials();
        }
    }
    
    

    2.2 SmsAuthenticationFilter

    然后编写 SmsAuthenticationFilter,参考 UsernamePasswordAuthenticationFilter的源码,直接粘过来,改一改。

    步骤:

    1. 认证请求的方法必须为POST
    2. 从request中获取手机号
    3. 封装成自己的Authenticaiton的实现类SmsCodeAuthenticationToken(未认证)
    4. 调用 AuthenticationManagerauthenticate方法进行验证(即SmsCodeAuthenticationProvider
    public class SmsCodeAuthenticationFilter extends AbstractAuthenticationProcessingFilter {
    	/**
         * form表单中手机号码的字段name
         */
    	
    	public static final String WU_FORM_MOBILE_KEY = "mobile";
    	private String mobileParameter = "mobile";
    	private boolean postOnly = true;  //只处理Post请求。
    
    	//请求的匹配器。
    	public SmsCodeAuthenticationFilter() {
    		super(new AntPathRequestMatcher("/authentication/mobile", "POST"));
    	}
    
    	public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {
    		//是否仅 POST 方式
    		if (this.postOnly && !request.getMethod().equals("POST")) {
    			throw new AuthenticationServiceException("Authentication method not supported: " + request.getMethod());
    		} else {
    			//取出手机号
    			String mobile = this.obtainMobile(request);
    			if (mobile == null) {
    				mobile = "";
    			}
    			//去除空格
    			mobile = mobile.trim();
    			//这里封装未认证的Token
    			SmsCodeAuthenticationToken authRequest = new SmsCodeAuthenticationToken(mobile);
    			//将请求信息也放入到Token中。
    			this.setDetails(request, authRequest);
    			//首先进入方法这里会找到我们自己写的SmsCodeAuthenticationProvider.
    			//最后将结果放回到这里之后,经过AbstractAuthenticationProcessingFilter,这个抽象类的doFilter,然后调用处理器。成功调用成功处理器,失败调用失败处理器。
    			return this.getAuthenticationManager().authenticate(authRequest);
    		}
    	}
    
    	/**
    	 * 获取手机号的方法
    	 * @param request
    	 * @return
    	 */
    	protected String obtainMobile(HttpServletRequest request) {
    		return request.getParameter(this.mobileParameter);
    	}
    	//将请求信息也放入到Token中。
    	protected void setDetails(HttpServletRequest request, SmsCodeAuthenticationToken authRequest) {
    		authRequest.setDetails(this.authenticationDetailsSource.buildDetails(request));
    	}
    
    	public void setMobileParameter(String mobileParameter) {
    		Assert.hasText(mobileParameter, "mobile parameter must not be empty or null");
    		this.mobileParameter = mobileParameter;
    	}
    
    	public void setPostOnly(boolean postOnly) {
    		this.postOnly = postOnly;
    	}
    
    	public final String mobileParameter() {
    		return this.mobileParameter;
    	}
    
    }
    
    

    2.3 SmsAuthenticationProvider

    这个方法比较重要,这个方法首先能够在使用短信验证码登陆时候被 AuthenticationManager挑中,其次要在这个类中处理验证逻辑。
    在这里插入图片描述

    步骤:

    1. 实现 AuthenticationProvider接口,实现 authenticate() 和 supports() 方法。
    2. supports() 方法决定了这个 Provider 要怎么被 AuthenticationManager挑中,我这里通过
      return SmsCodeAuthenticationToken.class.isAssignableFrom(authentication),处理所有
      SmsCodeAuthenticationToken及其子类或子接口。
    3. authenticate()方法处理验证逻辑。
      1. 首先将 authentication强转为 SmsCodeAuthenticationToken
      2. 从中取出登录的 principal,也就是手机号。
      3. 如果此时仍然没有异常,通过调用 loadUserByUsername(mobile) 读取出数据库中的用户信息。
      4. 如果仍然能够成功读取,没有异常,这里验证就完成了。
      5. 重新构造鉴权后的 SmsCodeAuthenticationToken,并返回给 SmsCodeAuthenticationFilter
    4. SmsCodeAuthenticationFilter的父类在 doFilter()方法中处理是否有异常,是否成功,根据处理结果跳转到登录成功/失败逻辑。
    import org.springframework.security.authentication.AuthenticationProvider;
    import org.springframework.security.authentication.BadCredentialsException;
    import org.springframework.security.core.Authentication;
    import org.springframework.security.core.AuthenticationException;
    import org.springframework.security.core.userdetails.UserDetails;
    import org.springframework.security.core.userdetails.UserDetailsService;
    import org.springframework.web.context.request.RequestContextHolder;
    import org.springframework.web.context.request.ServletRequestAttributes;
    
    import javax.servlet.http.HttpServletRequest;
    import java.util.Map;
    
    /**
     * 短信登陆鉴权 Provider,要求实现 AuthenticationProvider 接口
     */
    public class SmsCodeAuthenticationProvider implements AuthenticationProvider {
        private UserDetailsService userDetailsService;
    
        @Override
        public Authentication authenticate(Authentication authentication) throws AuthenticationException {
            SmsCodeAuthenticationToken authenticationToken = (SmsCodeAuthenticationToken) authentication;
    
            String mobile = (String) authenticationToken.getPrincipal();
    
            UserDetails userDetails = userDetailsService.loadUserByUsername(mobile);
    
            // 此时鉴权成功后,应当重新 new 一个拥有鉴权的 authenticationResult 返回
            SmsCodeAuthenticationToken authenticationResult = new SmsCodeAuthenticationToken(userDetails, userDetails.getAuthorities());
    
            authenticationResult.setDetails(authenticationToken.getDetails());
    
            return authenticationResult;
        }
    
        @Override
        public boolean supports(Class<?> authentication) {
            // 判断 authentication 是不是 SmsCodeAuthenticationToken 的子类或子接口
            return SmsCodeAuthenticationToken.class.isAssignableFrom(authentication);
        }
    
        public UserDetailsService getUserDetailsService() {
            return userDetailsService;
        }
    
        public void setUserDetailsService(UserDetailsService userDetailsService) {
            this.userDetailsService = userDetailsService;
        }
    }
    
    

    hardcode的方式来模拟手机号查询用户信息

    向手机13012345678发送短信验证码3237
    2019-11-18 10:35:56.351  INFO 180980 --- [nio-8060-exec-6] c.i.s.c.v.code.ValidateCodeFilter        : 校验请求(/authentication/mobile)中的验证码,验证码类型SMS
    2019-11-18 10:35:56.351  INFO 180980 --- [nio-8060-exec-6] c.i.s.c.v.code.ValidateCodeFilter        : 验证码校验通过
    2019-11-18 10:36:11.425  INFO 180980 --- [nio-8060-exec-6] com.imooc.security.MyUserDetailsService  : 表单登录用户名:13012345678
    2019-11-18 10:36:12.961  INFO 180980 --- [nio-8060-exec-6] com.imooc.security.MyUserDetailsService  : 登录用户名:13012345678
    2019-11-18 10:36:25.432  INFO 180980 --- [nio-8060-exec-6] com.imooc.security.MyUserDetailsService  : 数据库密码是:$2a$10$hC7oYh4G4iUAXrLq3hFZtezWCL07UP9pPwp8zZYPZwPTraV8CCCta
    Disconnected from the target VM, address: '127.0.0.1:57718', transport: 'socket'
    2019-11-18 10:38:33.638  INFO 180980 --- [nio-8060-exec-6] .s.b.a.ImoocAuthenticationSuccessHandler : 登录成功
    

    开头就说过了,为了方便介绍,写最少的代码,因此这是一个假的短信登录。如果你看这里的 UserDetailsService
    的代码话,你会发现它是从数据库中根据 name 获取信息的,我其实就是把用户名来当手机号用。
    这里只是一个demo,所以没有写查询数据库的逻辑,只是通过hardcode的方式来模拟查询数据库这个过程,用手机号作为用户名来验证用户信息
    因此,如果你想根据数据库中其他字段,例如 phone 来得到用户信息,可以再写一个叫做
    SmsUserDetailsService,在这里注入到 provider 中。

    2.4 成功与失败处理逻辑

    上面最后说到,在 SmsCodeAuthenticationFilter 的父类,会根据验证结果跳转到成功或失败处理逻辑,现在我们就编写下这个的处理。

    验证成功处理:

    @Component
    public class CustomAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
        @Autowired
        private ObjectMapper objectMapper;
    
        private Logger logger = LoggerFactory.getLogger(getClass());
    
        @Override
        public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
            logger.info("登录成功");
    
            response.setContentType("application/json;charset=UTF-8");
            response.getWriter().write(objectMapper.writeValueAsString(authentication));
        }
    }
    
    

    验证失败处理:

    @Component
    public class CustomAuthenticationFailureHandler implements AuthenticationFailureHandler {
        @Autowired
        private ObjectMapper objectMapper;
    
        private Logger logger = LoggerFactory.getLogger(getClass());
    
        @Override
        public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException {
            logger.info("登陆失败");
    
            response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
            response.setContentType("application/json;charset=UTF-8");
            response.getWriter().write(objectMapper.writeValueAsString(exception.getMessage()));
        }
    }
    
    

    2.5 SmsCodeAuthenticationSecurityConfig

    下面我们需要把我们自己写的这么多类添加进 Spring Security 框架中,在以往,我们都是直接往 WebSecurityConfig 中加,但是这样会导致 WebSecurityConfig 内容太多,难以维护。

    因此我们可以为每种登录方式都建议一个专属于它的配置文件,再把这个配置文件加入到 WebSecurityConfig 中,进行解耦。

    因此建立短信验证码登录的配置文件SmsCodeAuthenticationSecurityConfig :

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.security.authentication.AuthenticationManager;
    import org.springframework.security.config.annotation.SecurityConfigurerAdapter;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.core.userdetails.UserDetailsService;
    import org.springframework.security.web.DefaultSecurityFilterChain;
    import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
    import org.springframework.stereotype.Component;
    
    @Component
    public class SmsCodeAuthenticationSecurityConfig extends SecurityConfigurerAdapter<DefaultSecurityFilterChain, HttpSecurity> {
        @Autowired
        private UserDetailsService userDetailsService;
        @Autowired
        private CustomAuthenticationSuccessHandler customAuthenticationSuccessHandler;
        @Autowired
        private CustomAuthenticationFailureHandler customAuthenticationFailureHandler;
    
        @Override
        public void configure(HttpSecurity http) throws Exception {
            SmsCodeAuthenticationFilter smsCodeAuthenticationFilter = new SmsCodeAuthenticationFilter();
            smsCodeAuthenticationFilter.setAuthenticationManager(http.getSharedObject(AuthenticationManager.class));
            smsCodeAuthenticationFilter.setAuthenticationSuccessHandler(customAuthenticationSuccessHandler);
            smsCodeAuthenticationFilter.setAuthenticationFailureHandler(customAuthenticationFailureHandler);
    
            SmsCodeAuthenticationProvider smsCodeAuthenticationProvider = new SmsCodeAuthenticationProvider();
            smsCodeAuthenticationProvider.setUserDetailsService(userDetailsService);
    
            http.authenticationProvider(smsCodeAuthenticationProvider)
                    .addFilterAfter(smsCodeAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);
        }
    }
    
    

    在这个配置文件中,首先给 SmsCodeAuthenticationFilter 指定了:

    AuthenticationManager:不指定这个上面的流程图就断掉了。
    指定登录成功/失败处理逻辑,方便其父类调用。
    然后指定了 SmsCodeAuthenticationProvider,并指定了 UserDetailsService ,方便在验证处理时候通过 loadUserByUsername() 读取出数据库中的用户信息。

    最后将 filter 和 provider 都加入 HttpSecurity 配置中。

    将上述的逻辑加入到一起,放在BrowserSecurityConfig中去

    下面我们就需要把自己写的 SmsCodeAuthenticationSecurityConfig加入到 SecurityConfig 中了。
    首先将 SmsCodeAuthenticationSecurityConfig 注入进来,然后通过 http.apply(xxx) 添加进去。

    @Configuration
    @EnableWebSecurity
    @EnableGlobalMethodSecurity(prePostEnabled = true)
    public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    
        @Autowired
        private SmsCodeAuthenticationSecurityConfig smsCodeAuthenticationSecurityConfig;
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.apply(smsCodeAuthenticationSecurityConfig).and().authorizeRequests()
                    // 如果有允许匿名的url,填在下面
                    .antMatchers("/sms/**").permitAll()
                    .anyRequest().authenticated()
                    .and()
                    // 设置登陆页
                    .formLogin().loginPage("/login")
                    // 设置登陆成功页
                    .defaultSuccessUrl("/").permitAll()
                    .and()
                    .logout().permitAll();
    
            // 关闭CSRF跨域
            http.csrf().disable();![在这里插入图片描述](https://img-blog.csdnimg.cn/20191118133448705.gif)
        }
    
        @Override
        public void configure(WebSecurity web) throws Exception {
            // 设置拦截忽略文件夹,可以对静态资源放行
            web.ignoring().antMatchers("/css/**", "/js/**");
        }
    }
    
    

    在这里插入图片描述

    展开全文
  • 使用java在项目完成手机短信登录

    万次阅读 多人点赞 2019-06-19 14:01:42
    手机号登录在现在的项目中用的场景非常多,实现起来也不难,今天我们就一起来通过演示实现登录过程。 &lt;1&gt;首先需要注册个第三方的账户,比如秒嘀科技等,然后拿到三个参数值:QUERAY_PATH ACCOUNT_...
  • 这篇博客主要记录下短信验证码存入redis,实现用户登录,算是个人笔记! 短信验证代码就不多说了,这里用的阿里的短信SDK,简单修改就可以使用了! 首先是在服务器上安装redis,服务器设置redis端口...
  • 2.选择短信项目:饿了么,点击获取手机号 3.将平台中提供的手机号填入饿了么登录页 饿了么登录网址:https://h5.ele.me/login/#redirect=https%3A%2F%2Fh5.ele.me%2Fprofile%2F%23come_from%3Dlogout 可能需要...
  • 短信登录 验证即登录,没有百度帐号也可以使用 手机号 发送动态密码 用短信收到的验证码就可以直接登录
  • vue实现短信登录和密码登录

    千次阅读 2019-07-08 15:35:31
    短信验证和密码验证切换是根据loginWay来判断的,若是true代表短信登陆, false代表密码,手机号,用户名等用正则来验证 <template> <div class="loginContainer"> <div class="loginInner"> &...
  • 官方给的一份短信验证Demo,现在分享给大家,挺实用的,可以直接下载使用
  • 【Shiro】用户名密码或手机号短信登录(多realm认证)。
  • 短信登录开发 上图,可见要自己扩展的明白原理流程; 短信登录和 用户名密码登录的逻辑不同(现在也不知道为什么不同,跟着走吧),不能和之前的写在一起 这里模仿它的原理进行另外一条线,加入短信登录的认证...
  • : 具体代码可以根据vue element admin源码进行更改,下面是页面代码 <el-form ref="loginForm" :model="loginForm" class="login-form" auto-complete="on" label-position="left" >...用户登录</h3>
  • 1.账号密码登录:获取用户名、密码,检验是否存在该账号,以及该账号是否有效(未冻结、未删除),检验密码是否正确 public Result<JSONObject> login(@RequestBody SysLoginModel sysLoginModel) throws ...
  • 短信登录配置及重构 重构思路: 重构不是更改已有的功能 重构是不影响已有功能的情况下,对已有代码进行抽象封装 多处使用相同代码的地方,需要抽出来 比如上章节的很多代码, 如:图形验证码过滤器和短信验证码...
  •  请输入短信验证码" id="code"/>                    获取验证码" type="button" onclick="getVerificationCode()"/>            ()" >...
  • 帐户短信 允许用户使用他们的电话号码登录。 ##用法 meteor add dispatch:accounts-sms 服务器 // Configure to use twilio. Accounts.sms.configure({ twilio: { from: Meteor.settings.TWILIO.FROM, sid: ...
  • 目前常见的社交软件、购物软件、支付软件、理财软件等,均需要用户进行登录才...本章我们将使用Spring Security实现短信验证码登录。 概述在Spring Security源码分析一:Spring Security认证过程和Spring Security源码
  • 登录认证中,经常需要实现用户名密码和手机号验证码这两种登录方式。 最近学了Shiro,所以在这里记录下。 用户名密码使用的令牌自然是UsernamePasswordToken,我们可以继承UsernamePasswordToken,再添加上...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 53,946
精华内容 21,578
关键字:

短信登录