前端工作总结228-第三方登录请求参考

简介: 前端工作总结228-第三方登录请求参考
<style>
    body{
        overflow:hidden;
    }
    .login-box {
        margin-top: -10rem;
        padding: 5px;
    }
    .card {
        border-radius: .45rem
    }
    .form-group {
        text-align: left;
    }
</style>
<div class="login-page bg-40" style="display:none;">
    <div class="login-box">
        <div class="card">
            <div class="card-body login-card-body shadow-100">
                <p class="login-box-msg mt-1 mb-1">{{ __('admin.welcome_back') }}</p>
                <form id="login-form" method="POST" action="{{ admin_url('auth/login') }}">
                    <input type="hidden" name="_token" value="{{ csrf_token() }}"/>
                    <input type="hidden" id="local_url" name="local_url" value="{{env('DING_LOCAL_URL')}}">
                    <input type="hidden" id="app_id" name="app_id" value="{{env('DING_APP_ID')}}">
                    <input type="hidden" id="qrcode_url" name="qrcode_url" value="{{env('DING_MESSAGE_URL')}}">
                    <fieldset class="form-label-group form-group position-relative has-icon-left">
                        <input
                            type="text"
                            class="form-control {{ $errors->has('username') ? 'is-invalid' : '' }}"
                            name="username"
                            placeholder="{{ trans('admin.username') }}"
                            value="admin"
                            required
                            autofocus
                        >
                    </fieldset>
                    <fieldset class="form-label-group form-group position-relative has-icon-left">
                        <input
                            minlength="5"
                            maxlength="20"
                            id="password"
                            type="password"
                            class="form-control {{ $errors->has('password') ? 'is-invalid' : '' }}"
                            name="password"
                            placeholder="{{ trans('admin.password') }}"
                            required
                            autocomplete="current-password"
                            value="admin"
                        >
                    </fieldset>
                    <div class="form-group d-flex justify-content-between align-items-center">
                        <div class="text-left">
                            <fieldset class="checkbox">
                                <div class="vs-checkbox-con vs-checkbox-primary">
                                    <input id="remember" name="remember" value="1"
                                           type="checkbox" {{ old('remember') ? 'checked' : '' }}>
                                </div>
                            </fieldset>
                        </div>
                    </div>
                    <button type="submit" class="btn btn-primary float-right login-btn">
                        {{ __('admin.login') }}
                        <i class="feather icon-arrow-right"></i>
                    </button>
                </form>
            </div>
        </div>
    </div>
</div>
<div class="login-page" style="background-image:url(/images/bg-image.jpg); background-repeat:no-repeat; background-size:100% 100%;-moz-background-size:100% 100%;">
    <div class="login-box" style="position:absolute;right:50px;top:350px;">
        <div class="card row">
{{--            <div class="" style="text-align: center;font-size: 24px;width:100%;margin-top:10px">--}}
{{--                <div class="user col-5" style="color:red;border:1px solid #909090">用户</div>--}}
{{--                <div class="leader col-5" style="border:1px solid #909090">管理员</div>--}}
{{--            </div>--}}
            <ul class="nav nav-tabs" id="myTab" role="tablist">
                <li class="nav-item col-6" style="text-align: center" role="presentation">
                    <a style="font-size:1.5rem" class="nav-link active" id="user-tab" data-toggle="tab" href="#user" role="tab" aria-controls="user" aria-selected="true">员工登录</a>
                </li>
                <li class="nav-item col-6" style="text-align: center" role="presentation">
                    <a style="font-size:1.5rem" class="nav-link" id="leader-tab" data-toggle="tab" href="#leader" role="tab" aria-controls="leader" aria-selected="false">管理员登录</a>
                </li>
            </ul>
            <div class="tab-content" id="myTabContent">
                <div class="login_content user-logo tab-pane fade show active" id="user" role="tabpanel" aria-labelledby="home-tab" style="margin-top: 10px; border: none; background-color: rgb(255, 255, 255);border-radius: 5px;margin: auto;overflow: hidden;position: relative;height: 386px">
                    <div class="login_body" style="text-align: center;">
                        <div class="login_qrcode">
                            <div class="login_qrcode_content" style="text-align: center;height: 210px;width: 210px;margin: auto;margin-top: 40px;" id="qrcode" title="">
                                <div id="output"></div>
                            </div>
                            <div class="login_qrcode_text" style="margin-top: 20px;text-align: center;color: #898d90;font-size: 14px;">
                                请使用钉钉扫描二维码登录
                            </div>
                        </div>
                    </div>
                </div>
                <div class="leader-logo tab-pane fade" role="tabpanel" aria-labelledby="leader-tab" id="leader" style="margin-left: 15px">
                    <form id="login-form1" method="POST">
                        <div id="login_container"></div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>
<script src="https://g.alicdn.com/dingding/dinglogin/0.0.5/ddLogin.js"></script>
<script src="/js/jquery.qrcode.min.js"></script>
<script>
    Dcat.ready(function () {
        let qrcode_url = $('#qrcode_url').val();
        let _this = this;
        let uurl = '';
        let app_id = $('#app_id').val();
        let local_url = $('#local_url').val();
        let url = encodeURIComponent(local_url);
        let goto = encodeURIComponent("https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid="+app_id+"&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=" + url);
        var obj = DDLogin({
            id: "login_container",//这里需要你在自己的页面定义一个HTML标签并设置id,例如<div id="login_container"></div>或<span id="login_container"></span>
            goto: goto, //请参考注释里的方式
            style: "margin-top:10px;border:none;background-color:#FFFFFF;",
            width: "350",
            height: "380"
        });
        var handleMessage = function (event) {
            var origin = event.origin;
            console.log("origin", event.origin);
            if (origin == "https://login.dingtalk.com") { //判断是否来自ddLogin扫码事件。
                var loginTmpCode = event.data;
                //获取到loginTmpCode后就可以在这里构造跳转链接进行跳转了
                // console.log("loginTmpCode", loginTmpCode);
                $('.login-btn').click();
                uurl = "https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid="+app_id+"&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=" + url + "&loginTmpCode=" + loginTmpCode;
                // window.location.href = "https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid="+app_id+"&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=" + url + "&loginTmpCode=" + loginTmpCode;
            }
        };
        if (typeof window.addEventListener != 'undefined') {
            window.addEventListener('message', handleMessage, false);
        } else if (typeof window.attachEvent != 'undefined') {
            window.attachEvent('onmessage', handleMessage);
        }
        // ajax表单提交
        $('#login-form').form({
            validate: true,
            success: function (data) {
                if (!data.status) {
                    Dcat.error(data.message);
                    return false;
                }
                // Dcat.success(data.message);
                location.href = uurl;
                return false;
            }
        });
        $(function(){
            $('#output').qrcode({
                render: "canvas", //也可以替换为table
                width: 210,
                height: 210,
                text: qrcode_url
            });
        })
        $(".user").click(function () {
            $('.user').css('color','red');
            $('.leader').css('color','black');
            $('.leader-logo').css('display','none');
            $('.user-logo').css('display','block');
        });
        $(".leader").click(function () {
            $('.leader').css('color','red');
            $('.user').css('color','black');
            $('.user-logo').css('display','none');
            $('.leader-logo').css('display','block');
        });
    });
</script>
相关文章
|
1月前
|
JSON 前端开发 测试技术
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
98 10
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
|
1月前
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
64 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
2月前
|
前端开发 JavaScript Java
前端解决axios请求的跨域问题【2步完成】
本文介绍如何通过前端配置解决跨域问题,主要针对Vue项目中的`vite.config.js`文件进行修改。作者在联调过程中遇到跨域报错
49 1
|
7月前
|
缓存 前端开发 中间件
[go 面试] 前端请求到后端API的中间件流程解析
[go 面试] 前端请求到后端API的中间件流程解析
|
5月前
|
前端开发 JavaScript
回顾前端页面发送ajax请求方式
回顾前端页面发送ajax请求方式
64 18
|
5月前
|
前端开发 JavaScript API
前端Get请求能在body上传参吗
【10月更文挑战第11天】 在浏览器环境中,GET请求的body参数会被忽略,这是因为浏览器中的XHR和fetch实现限制了这一行为。而在Node.js服务端环境中,GET请求可以在body中传递参数,因为服务端请求库没有这样的限制。实际上,GET请求不带body是HTTP标准的一部分,但在某些场景下,为了遵循RESTful规范,可以考虑通过服务端转发或BFF模式来实现复杂的参数传递。
|
5月前
|
存储 缓存 监控
|
5月前
|
移动开发 前端开发 HTML5
SharedWorker 优化前端轮询请求
【10月更文挑战第6天】
79 1
|
6月前
|
存储 JSON 前端开发
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘
本文介绍了在Node.js中使用token实现前端验证码和登录功能的详细流程,包括生成验证码、账号密码验证以及token验证和过期处理。
139 0
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘
|
8月前
|
存储 前端开发 安全
前端轮询问题之在setTimeout版轮询中,如何避免旧请求的响应继续触发定时
前端轮询问题之在setTimeout版轮询中,如何避免旧请求的响应继续触发定时
148 1

热门文章

最新文章