www.alsa.es
Open in
urlscan Pro
45.60.87.106
Public Scan
Submitted URL: http://www.alsa.es/
Effective URL: https://www.alsa.es/
Submission: On March 13 via api from US — Scanned from ES
Effective URL: https://www.alsa.es/
Submission: On March 13 via api from US — Scanned from ES
Form analysis
3 forms found in the DOMName: loginForm — POST https://www.alsa.es/home?p_p_id=BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_javax.portlet.action=busplusLoginAction&p_auth=8Wiarh0z
<form class="form ng-pristine ng-invalid ng-invalid-required ng-valid-pattern" id="loginForm" name="loginForm" method="post"
action="https://www.alsa.es/home?p_p_id=BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_javax.portlet.action=busplusLoginAction&p_auth=8Wiarh0z"
novalidate="" data-ng-submit="manageSubmit($event)" autocomplete="off">
<!-- Post Action -->
<input type="hidden" name="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_postLoginRedirect" id="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_postLoginRedirect" value="">
<input type="hidden" name="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_postLoginRedirectUrl" id="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_postLoginRedirectUrl" value="">
<fieldset>
<!-- componente login google -->
<div class="row">
<div class="col-xs-12 px-0" ng-class="{'col-md-6 col-md-offset-3': !isPopupLogin}">
<div class="g_id_signin" data-type="standard" data-shape="rectangular" data-theme="outline" data-text="signin_with" data-size="large" data-width="285" data-locale="es_ES" data-logo_alignment="left">
<div class="S9gUrf-YoZ4jf" style="position: relative;">
<div>
<div tabindex="0" role="button" aria-labelledby="button-label" class="nsm7Bb-HzV7m-LgbsSe hJDwNd-SxQuSe i5vt6e-Ia7Qfc uaxL4e-RbRzK" style="width:285px; max-width:400px; min-width:min-content;">
<div class="nsm7Bb-HzV7m-LgbsSe-MJoBVe"></div>
<div class="nsm7Bb-HzV7m-LgbsSe-bN97Pc-sM5MNb ">
<div class="nsm7Bb-HzV7m-LgbsSe-Bz112c"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" class="LgbsSe-Bz112c">
<g>
<path fill="#EA4335" d="M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z"></path>
<path fill="#4285F4" d="M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z"></path>
<path fill="#FBBC05" d="M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z"></path>
<path fill="#34A853" d="M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z"></path>
<path fill="none" d="M0 0h48v48H0z"></path>
</g>
</svg></div><span class="nsm7Bb-HzV7m-LgbsSe-BPrWId">Iniciar sesión con Google</span><span class="L6cTce" id="button-label">Iniciar sesión con Google</span>
</div>
</div>
</div><iframe
src="https://accounts.google.com/gsi/button?type=standard&shape=rectangular&theme=outline&text=signin_with&size=large&width=285&logo_alignment=left&client_id=1095897870165-1bvb91t0n687k6l037s2ltfh9j4rtrga.apps.googleusercontent.com&iframe_id=gsi_714451_505852&as=kj5hj0xEGL%2BF6VeGjDGAQQ&hl=es_ES"
allow="identity-credentials-get" id="gsi_714451_505852" title="Botón Iniciar sesión con Google" style="display: block; position: relative; top: 0px; left: 0px; height: 0px; width: 0px; border: 0px;"></iframe>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12" ng-class="{'col-md-6 col-md-offset-3': !isPopupLogin}">
<p class="google-o"><strong class="google-o__text">o</strong></p>
</div>
</div>
<!-- fin componente login google -->
<!-- Form fields -->
<div class="form-row row">
<!-- Bloque para el input DocumentNumber -->
<div class="col-xs-12" ng-class="{'col-md-6 col-md-offset-3': !isPopupLogin}">
<div class="form-group">
<label for="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_busplusDocumentNumber">NIF / NIE / Pasaporte/Email<span class="asterisco">*</span>
<!-- ngIf: showErrorMessage(loginForm._BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_userName) -->
</label>
<input id="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_busplusDocumentNumber" name="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_userName" type="text"
placeholder="Introduce tu documento de identidad o email" class="form-control ng-pristine ng-invalid ng-invalid-required"
data-ng-class="{'invalid-field': showErrorMessage(loginForm._BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_userName)}" data-ng-model="documentNumber" data-required="" data-ng-focus="" data-uw-rm-form="nfx">
<div class="error-container ng-hide" data-ng-show="showErrorMessage(loginForm._BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_userName)">
<small class="error-message" data-ng-show="loginForm._BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_userName.$error.required">Campo requerido.</small>
</div>
</div>
</div>
</div> <!-- row -->
<div class="form-row row">
<!-- Bloque para el input Password -->
<div class="col-xs-12" ng-class="{'col-md-6 col-md-offset-3': !isPopupLogin}">
<div class="form-group">
<label for="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_busplusPassword">Contraseña<span class="asterisco">*</span>
<!-- ngIf: showErrorMessage(loginForm._BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_password) -->
</label>
<input id="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_busplusPassword" name="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_password" type="password" placeholder="Introduce tu contraseña"
class="form-control ng-pristine ng-invalid ng-invalid-required" data-ng-class="{'invalid-field': showErrorMessage(loginForm._BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_password)}" data-ng-model="password"
data-required="" data-ng-focus="" data-uw-rm-form="nfx">
<div id="show_password" data-ng-class="revealedPassword_formLogin() ? 'icn-eye c-password__icon--slash' : 'icn-eye'" class="c-password__icon icn-eye ng-hide" type="image" data-ng-show="showButtonRevealPassword_formLogin()"
data-ng-click="mostrarContrasena_formLogin($event)" title="Ver contraseña">
<span class="ui-hidden-accessible">Ver contraseña</span>
</div>
<div class="error-container ng-hide" data-ng-show="showErrorMessage(loginForm._BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_password)">
<small class="error-message" data-ng-show="loginForm._BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_password.$error.required">Campo requerido.</small>
</div>
</div>
</div>
</div><!-- row -->
<div class="form-row row">
<div class="col-xs-12" ng-class="{'col-md-6 col-md-offset-3': !isPopupLogin}">
<!-- Esta parte no debe ser visible en el paso 3 - Fin -->
<!-- Recordar en futuras visitas -->
<div class="rememberLogin-container">
<input id="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_rememberMe" class="ui-hidden-accessible" name="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_rememberMe" type="checkbox" value="true" checked=""
data-uw-rm-form="nfx">
<label class="label-checkbox checkbox-altocontraste" for="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_rememberMe"> Recuérdame para futuras visitas </label>
</div>
</div>
</div><!-- row -->
<div class="form-row row">
<div class="col-xs-12" ng-class="{'col-md-6 col-md-offset-3': !isPopupLogin}">
<button type="submit" class="btn btn-primary">Entrar</button>
</div>
</div> <!-- row -->
<div class="form-row row">
<div class="col-xs-12" ng-class="{'col-md-6 col-md-offset-3': !isPopupLogin}">
<!-- Recuperar contraseña: Esta parte no debe ser visible en el paso 3 -->
<!-- ngIf: !isThirdStep() -->
<div class="recoverPass-container mt-3 ng-scope" data-ng-if="!isThirdStep()">
<script type="text/javascript">
params["isTestEnvironment"] = ""; // indica si estamos en entorno de desarrollo o produccion
params["jsonDateFormat"] = "yyyy/MM/dd hh:mm:ss";
params["timestamp"] = "1710215122000";
params["responsive992"] = "991";
params["responsive768"] = "767";
params["groupId"] = "21643679";
params["contextPath"] = '/o/Alsa-portlet';
params["validNamePattern"] = "^[0-9a-zA-Zá-úÁ-ÚñÑÄËÏÖÜäëïöüàèìòùÀÈÌÒÙªº\\-\\s\\.]*$";
//Si existe busplususer y no ha sido pasado como parámetro
//Informacion para contenidos en ventanas emergentes de condiciones de compra, etc
params["newsletterConditions"] = '21690005';
//Constantes globales (se usaran en controladores y templates con constants.PASSPORT)
//tipos de documentos a mostrar en los combos
constants["PASSPORT"] = 0;
constants["NIF"] = 1;
constants["NIE"] = 2;
if (params["activeGoogleTag"] == "true") {
if ('') {
alsa_GA.busplusAutoLogin('');
}
$(document).ready(function() {
alsa_GA.externalLinksInit();
});
}
</script>
<script src="https://estaticos.alsa.es/o/Alsa-portlet/busplus/busplusresetpassword/app/busplusresetpassword-min.js?t=1710215122000" type="text/javascript"></script>
<!-- <script src="https://estaticos.alsa.es/o/Alsa-portlet/busplus/busplusresetpassword/app/newPasswordFormApp.js?t=1710215122000" type="text/javascript"></script> -->
<!-- <script src="https://estaticos.alsa.es/o/Alsa-portlet/busplus/busplusresetpassword/app/newPasswordFormAppController.js?t=1710215122000" type="text/javascript"></script> -->
<!-- <script src="https://estaticos.alsa.es/o/Alsa-portlet/busplus/busplusresetpassword/app/recoverPasswordApp.js?t=1710215122000" type="text/javascript"></script> -->
<!-- <script src="https://estaticos.alsa.es/o/Alsa-portlet/busplus/busplusresetpassword/app/recoverPasswordDirective.js?t=1710215122000" type="text/javascript"></script> -->
<!-- <script src="https://estaticos.alsa.es/o/Alsa-portlet/busplus/busplusresetpassword/app/recoverPasswordService.js?t=1710215122000" type="text/javascript"></script> -->
<script src="https://estaticos.alsa.es/o/Alsa-portlet/busplus/busplusresetpassword/app/recoverPasswordService.js?t=1710215122000" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="https://estaticos.alsa.es/o/Alsa-portlet/busplus/busplusresetpassword/css/recover-password.css?t=1710215122000">
<script type="text/javascript">
params["namespaceRecoverPassword"] = "_BusplusLoginPortlet_WAR_Alsaportlet_";
params["RESET_PASSWORD_SHOW_SMS"] = 'true';
i18n.addTranslation('busplus.recover-password.title', '¿Has olvidado tu contraseña?');
i18n.addTranslation('busplus.recover-password.question', 'Escribe tu número de documento NIF,NIE, Pasaporte.');
i18n.addTranslation('busplus.recharge-card.document-number', 'Número de documento');
i18n.addTranslation('busplus.recover-password.question.email-empty', 'Tu usuario no tiene un email asociado. Por favor, introduce los siguientes datos de tu usuario y una dirección de email para hacerte llegar tu contraseña.');
i18n.addTranslation('busplus.login.error-email-message', 'Usuario sin dirección de email.');
i18n.addTranslation('busplus.login.error-email-message2', 'La fecha de nacimiento introducida no coincide con la del usuario. Por favor inténtelo de nuevo.');
i18n.addTranslation('busplus.recover-password.id-placeholder', 'NIF/NIE/Pasaporte');
i18n.addTranslation('busplus.recover-password.send-password', 'Recuperar contraseña');
i18n.addTranslation('busplus.recover-password.password-sent', 'Te hemos enviado un email con tu nueva contraseña.');
i18n.addTranslation('busplus.recover-password.can-change',
'Mira tu bandeja de correo y si no lo encuentras, revisa la bandeja de correo no deseado o spam. Si quieres modificar la nueva contraseña que te hemos enviado, entra en la sección "Tu perfil", dentro de tu Alsa Plus.');
i18n.addTranslation('busplus.login.error-message', 'Credenciales incorrectas.');
i18n.addTranslation('busplus.login.error-message.email-empty', 'busplus.login.error-message.email-empty');
i18n.addTranslation('busplus.login.unknown-error-message', 'Error desconocido durante el login. Por favor inténtalo más tarde.');
i18n.addTranslation('busplus.email.info.body-part1', 'Revisa tu bandeja de entrada, valida tu email para completar el registro Alsa Plus');
i18n.addTranslation('busplus.document-number.label', 'NIF / NIE / Pasaporte');
i18n.addTranslation('busplus.birth-date.label', 'Fecha de nacimiento');
i18n.addTranslation('general.label.day', 'Día');
i18n.addTranslation('general.label.month', 'Mes');
i18n.addTranslation('general.label.year', 'Año');
i18n.addTranslation('busplus.email.label', 'Email');
i18n.addTranslation('zz23.busplus.recover-password.password-sent', 'Si tus datos son correctos, recibirás un email para crear una nueva contraseña');
i18n.addTranslation('zz23.busplus.recover-password.can-change',
'Solo tienes que hacer clic en el enlace que aparece en el email y crear una nueva contraseña. Si no encuentras el mail en la bandeja de entrada, revisa la bandeja de correo no deseado o spam.');
i18n.addTranslation('zz23.busplus.recover-password.can-change.note', 'IMPORTANTE: Recuerda que este enlace solo tiene una validez de 30 minutos desde que recibes el email.');
i18n.addTranslation('zzz01.alsaplus.login.lost-password-question', '¿Olvidaste tu contraseña?');
i18n.addTranslation('validation.required-field', 'Campo requerido.');
i18n.addTranslation('zzz05.validation.password.secure', 'Introduce una contraseña segura: al menos 8 caracteres que incluyan una mayúscula, una minúscula y un número.');
i18n.addTranslation('validation.not-match', 'Los campos no coinciden');
i18n.addTranslation('busplus.profile.password.new', 'Nueva contraseña');
i18n.addTranslation('busplus.profile.password.new.repeat', 'Confirmar la nueva contraseña');
i18n.addTranslation('zzz05.recover-password.do.not.remember.email.phonenumber', 'No recuerdo el email ni el teléfono asociado');
i18n.addTranslation('zzz05.recover-password.verify.sms', 'Código de verificación recibido');
i18n.addTranslation('zzz05.recover-password.verify.sms.message', 'Si tus datos son correctos, recibirás un sms con un código de acceso de un sólo uso');
i18n.addTranslation('zzz05.recover-password.can.not.contact', '¡Parece que no podemos contactar contigo!');
i18n.addTranslation('zzz05.recover-password.refill.form', 'Por favor, rellena este formulario para que podamos ayudarte.');
i18n.addTranslation('zzz05.recover-password.contact.alsaplus', 'Contacto Alsa Plus');
i18n.addTranslation('general.navigation.close', 'Cerrar');
i18n.addTranslation('zzz05.recover-password.select.how', 'Selecciona cómo prefieres restablecer tu contraseña');
i18n.addTranslation('zzz05.recover-password.sms', 'Mensaje de texto (SMS)');
i18n.addTranslation('zzz01.alsaplus.change-password', 'Cambiar contraseña');
i18n.addTranslation('zzz05.general.resend', 'Reenviar');
i18n.addTranslation('zzz03.registered-user.registry.success.explanation', 'Tus datos se han guardado correctamente');
i18n.addTranslation('contactForm.error.title', 'Se ha producido un error');
i18n.addTranslation('zzz05.reset-password.retries.left1', 'Código de verificación erróneo, te queda/n');
i18n.addTranslation('zzz05.reset-password.retries.left2', '\ intento/s.');
i18n.addTranslation('zzz05.reset-password.sms.active', 'Ya tienes un código de verificación activo, revisa en tu teléfono e introduce el código de verificación');
i18n.addTranslation('zzz05.reset-password.no.retries', 'Ya no te quedan intentos, vuelve a enviar el SMS');
i18n.addTranslation('zzz05.reset-password.resend.sms', 'Código de verificación erróneo, ya no te quedan intentos, vuelve a enviar el SMS.');
i18n.addTranslation('zzz05.reset-password.sms.timeout', 'Código de verificación expirado. Vuelve a solicitar el envío SMS.');
</script>
<div id="recoverPasswordApp">
<data-sag-alsa-recover-password
data-recover-password-url="https://www.alsa.es/home?p_p_id=BusplusLoginPortlet_WAR_Alsaportlet&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_resource_id=AjaxRecoverPassword&p_p_cacheability=cacheLevelPage&p_p_auth=VMDAaUfB"
data-recover-password-reset-email-url="https://www.alsa.es/home?p_p_id=BusplusLoginPortlet_WAR_Alsaportlet&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_resource_id=AjaxRecoverPasswordResetEmail&p_p_cacheability=cacheLevelPage&p_p_auth=VMDAaUfB"
data-recover-password-sms-url="https://www.alsa.es/home?p_p_id=BusplusLoginPortlet_WAR_Alsaportlet&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_resource_id=AjaxRecoverPasswordSMS&p_p_cacheability=cacheLevelPage&p_p_auth=VMDAaUfB"
data-recover-password-check-verification-code-url="https://www.alsa.es/home?p_p_id=BusplusLoginPortlet_WAR_Alsaportlet&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_resource_id=AjaxRecoverPasswordCheckVerificationCode&p_p_cacheability=cacheLevelPage&p_p_auth=VMDAaUfB"
data-recover-password-reset-password-url="https://www.alsa.es/home?p_p_id=BusplusLoginPortlet_WAR_Alsaportlet&p_p_lifecycle=2&p_p_state=normal&p_p_mode=view&p_p_resource_id=AjaxRecoverPasswordResetPassword&p_p_cacheability=cacheLevelPage&p_p_auth=VMDAaUfB"
class="ng-isolate-scope">
<a href="#" data-ng-click="init('recoverPasswordModal')" class="recoverPass-container-link">
<strong data-ng-bind="i18n.t('zzz01.alsaplus.login.lost-password-question')" class="ng-binding">¿Olvidaste tu contraseña?</strong>
</a>
<div class="sag-modal fade" id="recoverPasswordModal" aria-labelledby="recoverPasswordModal-title" role="dialog" aria-describedby="recoverPasswordModal-desc" tabindex="-1" aria-hidden="true">
<div class="sag-modal-dialog sag-modal-dialog--medium pb-3">
<data-ng-form role="form" name="recoverForm" id="recoverForm" class="recover-password ng-pristine ng-valid-required ng-valid ng-valid-pattern" data-ng-model="formRecovery" novalidate="" data-isolate-form="">
<div class="sag-modal-header">
<button type="button" class="close" data-dismiss="modal">
<span aria-hidden="true"></span> <span class="sr-only ng-binding" data-ng-bind="i18n.t('general.navigation.close')">Cerrar</span>
</button>
<h2 id="recoverPasswordModal-title" class="sag-modal-title sag-modal-title--azul recover-password__modal-title">
<strong data-ng-bind="i18n.t('busplus.recover-password.title')" class="ng-binding">¿Has olvidado tu contraseña?</strong>
</h2>
</div>
<div class="sag-modal-content">
<div class="sag-modal-body" id="recoverPasswordModal-desc" aria-live="assertive">
<!-- Formulario de reset de contaseña -->
<!-- ngIf: RESET_PASSWORD_SHOW_SMS -->
<!-- Formulario reset contraseña SIN SMS -->
<!-- ngIf: !RESET_PASSWORD_SHOW_SMS -->
<div data-ng-if="!RESET_PASSWORD_SHOW_SMS" class="ng-scope">
<div data-ng-show="(data == '' && !showContactFormRedirect) || (data != '' && data.messageError)" class="ng-hide">
<!-- formulario para solicitar nueva password con dni (el usuario tiene email asociado) -->
<p data-ng-bind="i18n.t('busplus.recover-password.question')" class="ng-binding">Escribe tu número de documento NIF,NIE, Pasaporte.</p>
<!-- ngIf: data == '' || (data.messageError!='email-empty' && data.messageError!='email-empty-error') -->
<div class="form-group ng-scope" data-ng-if="data == '' || (data.messageError!='email-empty' && data.messageError!='email-empty-error')">
<div data-ng-show="data.messageError" class="bg-danger ng-hide">
<p data-ng-bind="data.messageError" class="ng-binding"></p>
</div>
<label for="account-recovery" data-ng-bind="i18n.t('busplus.recharge-card.document-number')" class="ng-binding">Número de documento</label>
<input type="text" name="account-recovery" class="form-control ng-pristine ng-valid" id="account-recovery" autocomplete="off" placeholder="NIF/NIE/Pasaporte" data-ng-model="formRecovery.userIdentifier"
data-ng-disabled="loading" capitalize="" data-uw-rm-form="nfx">
</div><!-- end ngIf: data == '' || (data.messageError!='email-empty' && data.messageError!='email-empty-error') -->
<!-- formulario para solicitar nueva password con fecha nacimiento y nif (el usuario NO tiene email asociado) -->
<!-- ngIf: data != '' && (data.messageError=='email-empty' || data.messageError=='email-empty-error') -->
</div>
</div><!-- end ngIf: !RESET_PASSWORD_SHOW_SMS -->
<!-- Mensaje de success al seleccionar el reset por email -->
<div data-ng-show="data != ''" class="">
<div data-ng-show="data.message" class="ng-hide">
<h3 data-ng-bind="i18n.t(data.message)" class="ng-binding">Undefined translation: undefined</h3>
<p data-ng-bind="i18n.t(data.message2)" class="ng-binding">Undefined translation: undefined</p>
<p data-ng-bind="i18n.t(data.messageNote)" class="ng-binding">Undefined translation: undefined</p>
</div>
</div>
<div data-ng-show="showContactFormRedirect" class="ng-hide">
<p data-ng-bind="i18n.t('zzz05.recover-password.can.not.contact')" class="sag-modal-text ng-binding">¡Parece que no podemos contactar contigo!</p>
<p data-ng-bind="i18n.t('zzz05.recover-password.refill.form')" class="sag-modal-text ng-binding">Por favor, rellena este formulario para que podamos ayudarte.</p>
<p>
<a href="/contacto/alsaplus" class="sag-modal-text d-flex align-items-center">
<span class="c-icn--form">
<i class="icn-check-c"></i>
<span class="c-icn--form__lines"></span>
</span>
<span data-ng-bind="i18n.t('zzz05.recover-password.contact.alsaplus')" class="ng-binding">Contacto Alsa Plus</span>
</a>
</p>
<p class="text-right mb-0">
<button type="button" class="btn btn-primary" data-dismiss="modal" data-ng-click="updateShowContactFormRedirect(false)">
<span data-ng-bind="i18n.t('general.navigation.close')" class="ng-binding">Cerrar</span>
</button>
</p>
</div>
<!-- Formulario para rellenar el codigo de verificacion recibido por SMS -->
<div data-ng-show="sendSmsData != '' && verificatedCodeData == ''" class="ng-hide">
<!-- <object data="sms-verification-code-form.html"></object> -->
<p class="sag-modal-text ng-binding" data-ng-bind="i18n.t('zzz05.recover-password.verify.sms.message')">Si tus datos son correctos, recibirás un sms con un código de acceso de un sólo uso</p>
<p class="recover-pass__verify-sms-text"><strong data-ng-bind="i18n.t('zzz05.recover-password.verify.sms')" class="ng-binding">Código de verificación recibido</strong></p>
<data-ng-form role="form" name="checkVerificationCodeForm" data-ng-model="formCheckVerificationCode" novalidate="" data-isolate-form="" class="ng-pristine ng-invalid ng-invalid-required">
<div class="row mx-0">
<div class="recover-pass__digit-container d-flex mb-3 col-md-6 col-md-offset-3 px-0">
<input class="digit-input recover-pass__digit-input ng-pristine ng-invalid ng-invalid-required" type="text" id="userVerificationCode1" name="userVerificationCode1"
data-ng-model="formCheckVerificationCode.userVerificationCode1" pattern="/^[0-9]$/" maxlength="1" required="" autocomplete="off" data-ng-keydown="handleKeyDown($event, 1)" data-uw-rm-form="fx" aria-label="Text field"
data-uw-hidden-control="hidden-control-element">
<input class="digit-input recover-pass__digit-input ng-pristine ng-invalid ng-invalid-required" type="text" id="userVerificationCode2" name="userVerificationCode2"
data-ng-model="formCheckVerificationCode.userVerificationCode2" pattern="/^[0-9]$/" maxlength="1" required="" autocomplete="off" data-ng-keydown="handleKeyDown($event, 2)" data-uw-rm-form="fx" aria-label="Text field"
data-uw-hidden-control="hidden-control-element">
<input class="digit-input recover-pass__digit-input ng-pristine ng-invalid ng-invalid-required" type="text" id="userVerificationCode3" name="userVerificationCode3"
data-ng-model="formCheckVerificationCode.userVerificationCode3" pattern="/^[0-9]$/" maxlength="1" required="" autocomplete="off" data-ng-keydown="handleKeyDown($event, 3)" data-uw-rm-form="fx" aria-label="Text field"
data-uw-hidden-control="hidden-control-element">
<input class="digit-input recover-pass__digit-input ng-pristine ng-invalid ng-invalid-required" type="text" id="userVerificationCode4" name="userVerificationCode4"
data-ng-model="formCheckVerificationCode.userVerificationCode4" pattern="/^[0-9]$/" maxlength="1" required="" autocomplete="off" data-ng-keydown="handleKeyDown($event, 4)" data-uw-rm-form="fx" aria-label="Text field"
data-uw-hidden-control="hidden-control-element">
<input class="digit-input recover-pass__digit-input ng-pristine ng-invalid ng-invalid-required" type="text" id="userVerificationCode5" name="userVerificationCode5"
data-ng-model="formCheckVerificationCode.userVerificationCode5" pattern="/^[0-9]$/" maxlength="1" required="" autocomplete="off" data-ng-keydown="handleKeyDown($event, 5)" data-uw-rm-form="fx" aria-label="Text field"
data-uw-hidden-control="hidden-control-element">
<input class="digit-input recover-pass__digit-input ng-pristine ng-invalid ng-invalid-required" type="text" id="userVerificationCode6" name="userVerificationCode6"
data-ng-model="formCheckVerificationCode.userVerificationCode6" pattern="/^[0-9]$/" maxlength="1" required="" autocomplete="off" data-ng-keydown="handleKeyDown($event, 6)" data-uw-rm-form="fx" aria-label="Text field"
data-uw-hidden-control="hidden-control-element">
</div>
</div>
<div data-ng-show="dataVerificationCode != '' || sendSmsData != ''" class="mb-3">
<div data-ng-show="dataVerificationCode.remainingAttempts" class="error-container ng-hide">
<small data-ng-bind="i18n.t('zzz05.reset-password.retries.left1') + ' ' + dataVerificationCode.remainingAttempts + i18n.t('zzz05.reset-password.retries.left2')" class="error-message ng-binding">Código de verificación
erróneo, te queda/n intento/s.</small>
</div>
<div data-ng-show="dataVerificationCode.message || sendSmsData.message" class="error-container ng-hide">
<small data-ng-bind="dataVerificationCode.message || sendSmsData.message" class="error-message ng-binding"></small>
</div>
</div>
<div class="text-right">
<button type="button" class="btn btn-lg btn-primary mt-3" data-ng-click="checkVerificationCode()">
<span data-ng-bind="i18n.t('ok')" class="ng-binding">Aceptar</span>
</button>
</div>
<!-- ngIf: showResendSMS -->
</data-ng-form>
</div>
<div data-ng-show="verificatedCodeData != '' && passwordResetMessage == ''" class="ng-hide">
<!-- <object data="reset-password-form.html"></object>-->
<!-- Formulario de reset de contraseña -->
<p class="sag-modal-text ng-binding" data-ng-bind="i18n.t('zzz01.alsaplus.change-password')">Cambiar contraseña</p>
<data-ng-form role="form" name="passwordResetForm" data-ng-model="passwordResetForm" novalidate="" data-isolate-form="" class="ng-pristine ng-invalid ng-invalid-required ng-invalid-pattern">
<div class="new-pass-form">
<div class="form-group">
<label data-ng-bind="i18n.t('busplus.profile.password.new')" class="ng-binding">Nueva contraseña</label>
<div class="input-with-icon">
<input id="newPassword" type="password" name="newPassword" data-ng-model="passwordResetForm.newPassword" ng-pattern="/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$/" required=""
class="ng-pristine ng-invalid ng-invalid-required ng-invalid-pattern" data-uw-rm-form="fx" aria-label="Password field" data-uw-hidden-control="hidden-control-element">
<i class="c-password__icon icn-eye" data-ng-class="showPassword ? 'icn-eye c-password__icon--slash' : 'icn-eye'" data-ng-click="showPassword = !showPassword"></i>
</div>
<div class="error-container ng-hide" data-ng-show="showErrorMessage(passwordResetForm.newPassword)">
<small class="error-message ng-binding" data-ng-show="passwordResetForm.newPassword.$error.required" data-ng-bind="i18n.t('validation.required-field')">Campo requerido.</small>
</div>
</div>
<div class="form-group">
<label data-ng-bind="i18n.t('busplus.profile.password.new.repeat')" class="ng-binding">Confirmar la nueva contraseña</label>
<div class="input-with-icon">
<input id="newPasswordRepeat" type="password" name="newPasswordRepeat" data-ng-model="passwordResetForm.newPasswordRepeat" ng-pattern="/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}$/" required=""
class="ng-pristine ng-invalid ng-invalid-required ng-invalid-pattern" data-uw-rm-form="fx" aria-label="Password field" data-uw-hidden-control="hidden-control-element">
<i class="c-password__icon icn-eye" data-ng-class="showPasswordRepeat ? 'icn-eye c-password__icon--slash' : 'icn-eye'" data-ng-click="showPasswordRepeat = !showPasswordRepeat"></i>
</div>
<div class="error-container ng-hide" data-ng-show="showErrorMessage(passwordResetForm.newPasswordRepeat)">
<small class="error-message ng-binding" data-ng-show="passwordResetForm.newPasswordRepeat.$error.required" data-ng-bind="i18n.t('validation.required-field')">Campo requerido.</small>
</div>
</div>
<div class="error-container ng-hide" data-ng-show="resetPasswordData.passwordPatternError">
<small class="error-message ng-binding" data-ng-bind="i18n.t('zzz05.validation.password.secure')">Introduce una contraseña segura: al menos 8 caracteres que incluyan una mayúscula, una minúscula y un número.</small>
</div>
<div class="error-container">
<small class="error-message ng-binding ng-hide" data-ng-show="resetPasswordData.passwordMismatchError" data-ng-bind="i18n.t('validation.not-match')">Los campos no coinciden</small>
</div>
</div>
<div class="recover-pass-button button-blue text-right">
<button data-ng-click="resetPassword()" type="submit" class="btn btn-primary ng-binding" data-ng-bind="i18n.t('ok')">Aceptar</button>
</div>
</data-ng-form>
</div>
<div data-ng-show="passwordResetMessage != ''" class="">
<p class="sag-modal-text ng-binding" data-ng-bind="i18n.t(passwordResetMessage)">Undefined translation: undefined</p>
<p class="text-right mb-0">
<button type="button" class="btn btn-primary ng-binding" data-dismiss="modal" data-ng-bind="i18n.t('ok')">Aceptar</button>
</p>
</div>
</div>
<div class="sag-modal-footer">
<div class="recover-pass-button button-blue">
<!-- ngIf: (data == '' && sendSmsData == '' && !showContactFormRedirect) || (sendSmsData == '' && !data.message && data.messageError!='email-empty' && data.messageError!='email-empty-error' && !showContactFormRedirect) -->
<!-- ngIf: data != '' && (data.messageError=='email-empty' || data.messageError=='email-empty-error') -->
<div data-ng-show="data != '' && data.message" class="ng-hide">
<button type="button" class="btn btn-primary mb-3 ng-binding" data-dismiss="modal" data-ng-bind="i18n.t('ok')">Aceptar</button>
</div>
<!-- ngIf: (data == '' || data.messageError) && sendSmsData == '' && verificatedCodeData == '' && !showContactFormRedirect -->
</div>
</div>
</div>
<!-- /.modal-content -->
</data-ng-form>
</div>
<!-- /.modal-dialog -->
</div>
<!-- /.modal -->
</data-sag-alsa-recover-password>
</div>
</div><!-- end ngIf: !isThirdStep() -->
</div>
</div>
<!-- Esta parte no debe ser visible en el paso 3, ni cuando se mostrando tambien la pagina de registro -->
<!-- ngIf: !isThirdStep() && !isRenderModeBoth -->
<div data-ng-if="!isThirdStep() && !isRenderModeBoth" class="form-row row login-register ng-scope">
<div class="form-group col-xs-12" ng-class="{'col-md-6 col-md-offset-3': !isPopupLogin}">
<span class="link-register">
<strong class="link-register-slogan">¿No eres cliente Alsa Plus?</strong>
<a href="https://www.alsa.es/alsaplus-login/registro?p_p_id=BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_IMjszzHEduc8&p_p_lifecycle=0&p_p_state=normal&p_p_mode=view&p_p_auth=fvHhDLmh">Regístrate</a>
</span>
</div>
</div><!-- end ngIf: !isThirdStep() && !isRenderModeBoth --><!-- row -->
<!-- Esta parte no debe ser visible en el paso 3 - Fin -->
</fieldset>
</form>
Name: _BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_loginGoogleForm — POST https://www.alsa.es/home?p_p_id=BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_javax.portlet.action=busplusLoginGoogleAction&p_auth=8Wiarh0z
<form class="form ng-pristine ng-valid" id="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_loginGoogleForm" name="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_loginGoogleForm" method="post"
action="https://www.alsa.es/home?p_p_id=BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view&_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_javax.portlet.action=busplusLoginGoogleAction&p_auth=8Wiarh0z"
enctype="application/x-www-form-urlencoded" novalidate="">
<input type="hidden" id="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_credential" name="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_credential">
<input type="hidden" name="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_postLoginRedirect" id="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_postLoginRedirect" value="">
<input type="hidden" name="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_postLoginRedirectUrl" id="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_postLoginRedirectUrl" value="">
<input type="hidden" name="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_googleRememberLogin" id="_BusplusLoginPortlet_WAR_Alsaportlet_INSTANCE_utilityMiscLogin_googleRememberLogin">
</form>
Name: hrefFm — POST #
<form action="#" aria-hidden="true" class="hide" id="hrefFm" method="post" name="hrefFm"><span></span><input hidden="" type="submit" data-uw-rm-form="fx" aria-label="Submit button" data-uw-hidden-control="hidden-control-element"></form>
Text Content
Saltar al contenido principalHabilitar las funciones de accesibilidad para Dificultades visualesAbrir el menú de accesibilidad Abrir el menú de navegación accesible Información sobre Cookies Con tu consentimiento, nosotros y nuestros 12 socios usamos cookies o tecnologías similares para almacenar, acceder y procesar datos personales, como tus visitas a esta página web, las direcciones IP y los identificadores de cookies. Algunos socios no te piden consentimiento para procesar tus datos y se amparan en su legítimo interés comercial. Puedes retirar tu consentimiento u oponerte al procesamiento de datos según el interés legítimo en cualquier momento haciendo clic en ''Obtener más información'' o en la política de privacidad de esta página web. Nosotros y nuestros socios hacemos el siguiente tratamiento de datos:Cookies publicitarias, Datos de localización geográfica precisa e identificación mediante análisis de dispositivos , Publicidad y contenido personalizados, medición de publicidad y contenido, investigación de audiencia y desarrollo de servicios Más InformaciónRechazar opcionalesAceptar y continuar CAMBIO DE LENGUAJE Español Català Français Galego English Italiano Portugues Euskara Deutsch Aceptar * Español * Català * Français * Galego * English * Italiano * Portugues * Euskara * Deutsch Español * Atención al cliente * Alsa Empresas * Alsa Empresas * Inicia Sesión ACCESO Cerrar ACCESO Iniciar sesión con GoogleIniciar sesión con Google o NIF / NIE / Pasaporte/Email* Campo requerido. Contraseña* Ver contraseña Campo requerido. Recuérdame para futuras visitas Entrar ¿Olvidaste tu contraseña? Cerrar ¿HAS OLVIDADO TU CONTRASEÑA? Escribe tu número de documento NIF,NIE, Pasaporte. Número de documento UNDEFINED TRANSLATION: UNDEFINED Undefined translation: undefined Undefined translation: undefined ¡Parece que no podemos contactar contigo! Por favor, rellena este formulario para que podamos ayudarte. Contacto Alsa Plus Cerrar Si tus datos son correctos, recibirás un sms con un código de acceso de un sólo uso Código de verificación recibido Código de verificación erróneo, te queda/n intento/s. Aceptar Cambiar contraseña Nueva contraseña Campo requerido. Confirmar la nueva contraseña Campo requerido. Introduce una contraseña segura: al menos 8 caracteres que incluyan una mayúscula, una minúscula y un número. Los campos no coinciden Aceptar Undefined translation: undefined Aceptar Aceptar ¿No eres cliente Alsa Plus? Regístrate Close TE HEMOS ENVIADO UN EMAIL... REVISA TU BANDEJA DE ENTRADA, VALIDA TU EMAIL PARA COMPLETAR EL REGISTRO ALSA PLUS. Si no encuentras el email, revisa tu bandeja de correo no deseado o spam. Close LO SENTIMOS, HA HABIDO UN ERROR AL COMPROBAR TU INVITACIÓN Por favor, solicita a tu amigo que te genere una nueva invitación. Si lo prefieres, puedes continuar con el proceso de alta en Alsa Plus, pero PERDERÁS las ventajas de ingresar por invitación. Toggle navigation * Destinos y rutas DESTINOS Y RUTAS * * RUTAS * MADRID - BARCELONA * MADRID - GRANADA * BILBAO - MADRID * MADRID - TOLEDO * MÁLAGA - GRANADA * MADRID - LISBOA * MADRID - PARÍS * MADRID - OPORTO * MÁS RUTAS * * DESTINOS * MADRID * GRANADA * BARCELONA * BILBAO * OVIEDO * PARÍS * LISBOA * BURDEOS * MÁS DESTINOS * * AEROPUERTOS * MADRID-BARAJAS T4 * MÁLAGA-COSTA DEL SOL * ALICANTE-ELCHE * BARCELONA-EL PRAT T1 * GRANADA-JAÉN * IBIZA * OPORTO-SÁ CARNEIRO * GINEBRA * MÁS AEROPUERTOS * Tu viaje TU VIAJE * * HORARIOS * ALSA, MOVILIDAD SEGURA * GESTIÓN DE BILLETES * CAMBIOS Y ANULACIONES * POLÍTICA DE CAMBIOS Y ANULACIONES * SOLICITAR FACTURA * EQUIPAJE * MOVILIDAD ACCESIBLE E INCLUSIVA * * TARIFAS Y DESCUENTOS * OFERTAS * TARIFA JOVEN DE 12 A 25 * TARIFA GRUPOS +4 * TARIFA MAYORES DE 60 * BLOQUEA EL ASIENTO DE AL LADO * * BONOS DISPONIBLES * BONOS GRATUITOS * BONOS REGIONALES HASTA 50% DTO. * A bordo A BORDO * * TIPOS DE AUTOBÚS * COMFORT * SUPRA * LOCALIZA TU BUS * * ENTRETENIMIENTO A BORDO * WIFI * ALSA RADIO * OCIO AUDIOVISUAL * * Servicios de movilidad SERVICIOS DE MOVILIDAD * * URBANOS Y METROPOLITANOS * BILBAO * JAÉN * TORREJÓN DE ARDOZ * FERROL * A CORUÑA * MURCIA * MAR MENOR - CARTAGENA * MÁS URBANOS Y METROPOLITANOS * ALSA MOBI4U * ALSA CAB * OTROS SERVICIOS * SOPORTES PUBLICITARIOS * ALSA RAIL * * REGIONALES, NACIONALES E INTERNACIONALES * REGIONALES * SERVICIO AUTOBUSES COMUNIDAD DE MADRID * CATALUÑA * ASTURIAS * CANTABRIA * COMUNIDAD VALENCIANA * MÁS REGIONALES * NACIONALES * MADRID - GUADALAJARA * MURCIA - ALMERÍA * INTERNACIONALES * PORTUGAL * ITALIA * FRANCIA * MÁS INTERNACIONALES * * ALQUILER * AUTOBUSES * COCHES CON CONDUCTOR * BODAS * OTROS EVENTOS * TURÍSTICOS * AUTOBUSES TURÍSTICOS * TREN DE FELIPE II * TRENES HISTÓRICOS * TRENES PATRIMONIO FERROVIARIO * NIEVE Y ESQUÍ * Alsa Plus ALSA PLUS * * * * Monedero MONEDERO * * * HASTA DONDE TÚ QUIERAS. SOLUCIONES DE MOVILIDAD - ALSA VIAJA SIN LÍMITES EN SEMANA SANTA CON TU BONO GRATIS ¡Compra tu bono! Bonos Gestiona tus billetes Localiza tu bus 15% de descuento si te haces Alsa Plus Date de alta como Alsa Plus en la web ¡y consigue 15% de descuento! Para obtenerlo, regístrate gratis y no te olvides de hacer clic en "Deseo recibir ofertas y descuentos personalizados..." ¡Hazte Alsa Plus! Alsa, líder en movilidad sostenible Nos mueven tus motivos En Alsa creemos que no hay trayecto grande o pequeño, que lo importante no es el destino, sino ese motivo que tienes para llegar allí. Siempre que haya un motivo, tendremos una forma de llegar a él. Nos mueves Alsa, Movilidad Segura En Alsa seguimos trabajando para garantizarte la máxima seguridad en cada viaje. Aplicamos estrictos protocolos de limpieza y desinfección y nuestros buses cuentan con el mejor equipamiento para que viajes seguro y tranquilo. Movilidad Segura Compensa tu huella Ahora puedes compensar la huella de carbono de tu viaje y colaborar en nuestros proyectos de reforestación para luchar contra el cambio climático. ¡Gracias por viajar en autobús! Conoce el Bosque Alsa * Tarifas y descuentos Elige entre nuestras tarifas mínima, reducida o flexible, y entre nuestros descuentos: familia numerosa, personas con discapacidad... Muévete al mejor precio. Aprovecha nuestras tarifas * Horarios Consulta todos nuestros horarios y disfruta de todas las ventajas de organizar tus rutas de autobús, conociendo las salidas de cada trayecto antes de reservar tu billete. Elige tu horario * Equipaje Puedes llevar contigo hasta 30 kilos de equipaje de forma gratuita. Y, si necesitas equipaje extra, no te preocupes, podrás añadir hasta otros 20 kilos más. Descubre más Descárgate la App Todo son ventajas: navega de forma sencilla, localiza tu bus en tiempo real, elige tu forma de pago favorita... y no imprimas tu billete, podrás mostrarlo o descargarlo en tu wallet. Google Play Apple Store Huawei App Gallery EMPTY HEADING * Sobre Alsa * Gestiona tus billetes * Empleo y formación * Soportes publicitarios * Fondos públicos * Contacto * Confianza Online SÍGUENOS * * * * * * * Aviso legal * Política de privacidad * Política de cookies * Condiciones de compra * Mapa web * Accesibilidad web ... Estás usando un navegador desactualizado o muy antiguo. Te recomendamos que lo actualices o que uses un navegador más moderno. Te sugerimos navegadores como Firefox o Chrome para mejorar tu experiencia de navegación en www.alsa.es. Cerrar Please ensure Javascript is enabled for purposes of website accessibility