pure js Authentification FireBase

by polinux

HTML

<script src="https://cdn.firebase.com/v0/firebase.js"></script>
<script src="https://cdn.firebase.com/v0/firebase-auth-client.js"></script>
	<div id="page-wrap">
	
	<h1>Authentification FireBase</h1>
	<div class="tabs">
        
       <div class="tab">
           <input type="radio" id="tab-1" name="tab-group-1" checked>
           <label for="tab-1">S'enregistrer</label>
           
           <div class="content">
			<form name='register'>
				<fieldset>
					<label for="email">Email</label>
					<input type="text" name="email" />
					<label for="password">Password</label>
					<input type="password" name="password" value="" />
					<button id='bt-register'>OK</button>
				</fieldset>
			</form>
           </div> 
       </div>
        
       <div class="tab">
           <input type="radio" id="tab-2" name="tab-group-1" />
           <label for="tab-2">Login</label>
           <div class="content">
			<form name='login'>
				<fieldset>
					<label for="email">Email</label>
					<input type="text" name="email" />
					<label for="password">Password</label>
					<input type="password" name="password" value=""  />
					<button id='bt-login'>OK</button>
				</fieldset>
			</form>
           </div> 
       </div>
        
        <div class="tab">
            <input type="radio" id="tab-3" name="tab-group-1">
          <label for="tab-3">Stuff</label>
          <div class="content">
           
 			<form name='info'>
				<fieldset>
					<output name="email"></output>
					<label for="userID:">Id</label>
					<input type="text" name="userID" value="" />
					<label for="provider">provider</label>
					<input type="text" name="provider" value="" />
					<button id='bt-logout'>Déconnexion</button> 
				</fieldset>
			</form>
           </div> 
       </div>
        
    </div>
    </div>

CSS

body {
    color: #353535;
    font-family: Helvetica,sans-serif;
}
h1 {
	font-size:18px;
    line-height: 1.3em;
}

#page-wrap {
	width:320px;
}
/* tab */
.tabs {
  position: relative;   
  min-height: 260px; /* This part sucks */
  clear: both;
  margin: 25px 0;
}
.tab {
  float: left;
}
.tab label {
  background: #eee; 
  padding: 10px; 
  border: 1px solid #ccc; 
  margin-left: -1px; 
  position: relative;
  left: 1px; 
}
.tab [type=radio] {
  display: none;   
}
.content {
  position: absolute;
  top: 28px;
  left: 0;
  background: white;
  right: 0;
  padding: 16px;
  border: 1px solid #ccc; 
  
  overflow: hidden;
}
.content > * {
  opacity: 0;
  
  -webkit-transform: translate3d(0, 0, 0);

  -webkit-transform: translateX(-100%);
  -moz-transform:    translateX(-100%);
  -ms-transform:     translateX(-100%);
  -o-transform:      translateX(-100%);
  
  -webkit-transition: all 0.6s ease;
  -moz-transition:    all 0.6s ease;
  -ms-transition:     all 0.6s ease;
  -o-transition:      all 0.6s ease;
}
[type=radio]:disabled ~ label {
  opacity: .5;
}

[type=radio]:checked ~ label {
  background: white;
  border-bottom: 1px solid white;
  z-index: 2;
  font-weight:bold;
  opacity: 1;
}
[type=radio]:checked ~ label ~ .content {
  z-index: 1;
}
[type=radio]:checked ~ label ~ .content > * {
  opacity: 1;
  
  -webkit-transform: translateX(0);
  -moz-transform:    translateX(0);
  -ms-transform:     translateX(0);
  -o-transform:      translateX(0);
}

/* login */
.tab fieldset {
	border:none;
	background-color:#ddd;
	border-radius:6px;
}

.tab fieldset label {
	border:none;
	display:block;
  background: transparent; 
  padding: 0px; 
  position: relative;
  left: 12px;
  bottom:-8px;
font-size:.8em;
}

.tab fieldset input {
  margin: 6px 4px; 
	width:96%;
}

JavaScript

var ref = new Firebase("https://YOURBASE.firebaseio.com");

// global user (is this a good thing?)
myUser = -1;

document.getElementById('bt-login').addEventListener( 'click', function(e){
	var f = document.forms.login;
	
	e.preventDefault();
	e.stopPropagation();
	
	return doLogin(f.email.value, f.password.value );
});
	
document.getElementById('bt-register').addEventListener( 'click', function(e){
	var f = document.forms.register;

	e.preventDefault();
	e.stopPropagation();
	
	return doregister(f.email.value, f.password.value );
});
	
document.getElementById('bt-logout').addEventListener( 'click', function(e){

	e.preventDefault();
	e.stopPropagation();
	authClient.logout();
			document.getElementById('tab-1').disabled =  false;
			document.getElementById('tab-1').checked =  true;
			document.getElementById('tab-2').disabled =  false;
			document.getElementById('tab-3').disabled =  true;
	return ;
});

function doregister(email, password) {
	authClient.createUser(email, password, function (error, user) {
		if (!error) {
			console.log('logging new registered user');
			doLogin(email, password);
		} else {
			alert(error);
		}
	});
};

function doLogin(email, password) {
    authClient.login('password', {
        email: email,
        password: password
    });
};

var authClient = new FirebaseSimpleLogin(ref, function(error, user) {

	var f = document.forms.info;
	
	f.email.value = '';
	f.userID.value = '';
	f.provider.value = '';
	
	if (error) {
    // an error occurred while attempting login
        alert(error);
	} else {
		if (user) {
			
			f.email.value = user.email;
			f.userID.value = user.id;
			f.provider.value = user.provider;

			document.getElementById('tab-1').disabled =  true;
			document.getElementById('tab-2').disabled =  true;
			document.getElementById('tab-3').disabled =  false;
			document.getElementById('tab-3').checked =  true;
		} else {
			// user is logged out

			document.getElementById('tab-1').disabled = ...