In simple terms, authentication is the process of verifying who a user is, while authorization is the process of verifying what they have access to.
Authencation - indentity of user
Authorization - have a/c of user, ready to access
https://firebase.google.com/ > Login with gmail > Get started > Add project > project name > create project > continue > select web > add nickname,no deploys yet-Register app > next(2) > Continue to console
> click Authentication > Get started > Sign-in method > Google > Enable > Project public-facing name+Project support email > save Email/Password > Enable > - Go to Templates
settings > project settings > configure
Go to docs > Fundamentals > Web > read how to setup firebase in project Open project folder by vs code
firebase.config.js
// Your web app's Firebase configuration
const firebaseConfig = {
apiKey: "AIzaSyC5_5FNJoy08a0hXqybecOLRI_7s7oivac",
authDomain: "ema-john-sample-5d577.firebaseapp.com",
projectId: "ema-john-sample-5d577",
storageBucket: "ema-john-sample-5d577.appspot.com",
messagingSenderId: "413333605932",
appId: "1:413333605932:web:2be2387f4dec489e384b89"
};
export default firebaseConfig;
npm install firebase@8.3.0
// App.js
import './App.css';
import firebase from "firebase/app";
import "firebase/auth";
// initialize Firebase
import firebaseConfig from './firebaseConfig';
firebase.initializeApp(firebaseConfig);
function App() {
const provider = new firebase.auth.GoogleAuthProvider();
return (
<div className="App">
<button>Sign-in</button>
</div>
);
}
export default App;
// App.js
import './App.css';
import firebase from "firebase/app";
import "firebase/auth";
// initialize Firebase
import firebaseConfig from './firebaseConfig';
firebase.initializeApp(firebaseConfig);
function App() {
const provider = new firebase.auth.GoogleAuthProvider();
// handleSignIn function
const handleSignIn = () => {
// console.log("handleSignIn clicked");
firebase.auth().signInWithPopup(provider)
.then(res => {
const {displayName, photoURL, email} = res.user;
console.log(displayName, photoURL, email);
})
}
return (
<div className="App">
<button>Sign-in</button>
<button onClick={handleSignIn}>Sign-in</button>
</div>
);
}
export default App;
// App.js
import './App.css';
import { useState } from 'react';
import firebase from "firebase/app";
import "firebase/auth";
// initialize Firebase
import firebaseConfig from './firebaseConfig';
firebase.initializeApp(firebaseConfig);
function App() {
const [user, setUser] = useState({
isSignedIn : false,
name: '',
email: '',
photo: ''
});
const provider = new firebase.auth.GoogleAuthProvider();
// handleSignIn function
const handleSignIn = () => {
firebase.auth().signInWithPopup(provider)
.then(res => {
const {displayName, photoURL, email} = res.user;
const signedInUser = {
isSignedIn: true,
name: displayName,
email: email,
photo: photoURL
}
setUser(signedInUser);
console.log(displayName, photoURL, email);
})
.catch(err => {
console.log(err);
console.log(err.message);
});
}
return (
<div className="App">
<button>Sign-in</button>
<button onClick={handleSignIn}>Sign-in</button>
{
user.isSignedIn && <div>
<p>Welcome! {user.name}</p>
<p>Your email: {user.email}</p>
<img src={user.photo} alt=""></img>
</div>
}
</div>
);
}
export default App;
// App.js
import './App.css';
import { useState } from 'react';
import firebase from "firebase/app";
import "firebase/auth";
// initialize Firebase
import firebaseConfig from './firebaseConfig';
firebase.initializeApp(firebaseConfig);
function App() {
const [user, setUser] = useState({
isSignedIn : false,
name: '',
email: '',
photo: ''
});
const provider = new firebase.auth.GoogleAuthProvider();
// handleSignIn function
const handleSignIn = () => {
firebase.auth().signInWithPopup(provider)
.then(res => {
const {displayName, photoURL, email} = res.user;
const signedInUser = {
isSignedIn: true,
name: displayName,
email: email,
photo: photoURL
}
setUser(signedInUser);
console.log(displayName, photoURL, email);
})
.catch(err => {
console.log(err);
console.log(err.message);
});
}
// handleSignOut function
const handleSignOut = () => {
firebase.auth().signOut()
.then(res => {
const signedOutUser = {
isSignedIn: false,
name: '',
email: '',
photo: ''
}
setUser(signedOutUser);
//console.log(res);
})
.catch(err => {
})
}
return (
<div className="App">
<button>Sign-in</button>
<button onClick={handleSignIn}>Sign-in</button>
{
user.isSignedIn ? <button onClick={handleSignOut}>Sign-out</button> :
<button onClick={handleSignIn}>Sign-in</button>
}
{
user.isSignedIn && <div>
<p>Welcome! {user.name}</p>
<p>Your email: {user.email}</p>
<img src={user.photo} alt=""></img>
</div>
}
</div>
);
}
export default App;
const handleChange = (e) => {
console.log(e.target.name, e.target.value);
}
const handleSubmit = () => {
}
//after return
{/* create simple login form email and password */}
<h2>Our own Authentication</h2>
<form action="" onSubmit={handleSubmit}>
<label htmlFor="">Your Email: </label>
<input type="text" onChange={handleChange} name="email" placeholder=""/>
<br />
<label htmlFor="">Your Password: </label>
<input type="password" onChange={handleChange} name="password" placeholder=""/>
<br />
<input type="submit" value="Submit" />
</form>
raw regex validation no used framework
```js const handleChange = (e) => { //console.log(e.target.name, e.target.value); if(e.target.name === "email"){ const isEmailValid = /\S+@\S+\.\S+/.test(e.target.value); console.log(isEmailValid); } if(e.target.name === "password"){ const isPasswordValid = e.target.value.length > 6; const passwordHasNumber = /\d{1}/.test(e.target.value); console.log(isPasswordValid && passwordHasNumber); } } ``` const [user, setUser] = useState({
isSignedIn : false,
name: '',
email: '',
password: '',
photo: ''
});
const handleChange = (e) => {
//debugger;
let isFormValid = true;
if(e.target.name === "email"){
isFormValid = /\S+@\S+\.\S+/.test(e.target.value);
}
if(e.target.name === "password"){
const isPasswordValid = e.target.value.length > 6;
const passwordHasNumber = /\d{1}/.test(e.target.value);
isFormValid = isPasswordValid && passwordHasNumber;
}
if(isFormValid){
// if true isFormValid then work this
const newUserInfo = {...user};
newUserInfo[e.target.name] = e.target.value;
setUser(newUserInfo);
}
}
send data of form at firebase
```js import './App.css'; import { useState } from 'react'; import firebase from "firebase/app"; import "firebase/auth";// Initialize Firebase import firebaseConfig from './firebase.config.js'; firebase.initializeApp(firebaseConfig);
function App() { const [user, setUser] = useState({ isSignedIn : false, name: '', email: '', password: '', photo: '', error: '', success: false });
const provider = new firebase.auth.GoogleAuthProvider();
const handleSignIn = () => { console.log("handleSignIn clicked"); firebase.auth().signInWithPopup(provider) .then(res => { const {displayName, photoURL, email} = res.user; const signedInUser = { isSignedIn: true, name: displayName, email: email, photo: photoURL } setUser(signedInUser); console.log(displayName, photoURL, email); }) .catch(err => { console.log(err); console.log(err.message); }); }
const handleSignOut = () => { console.log("handleSignOut clicked"); firebase.auth().signOut() .then(res => { const signedOutUser = { isSignedIn: false, name: '', email: '', photo: '' } setUser(signedOutUser); //console.log(res); }) .catch(err => {
})
}
const handleChange = (e) => { let isFormValid = true; if(e.target.name === "email"){ isFormValid = /\S+@\S+.\S+/.test(e.target.value); } if(e.target.name === "password"){ const isPasswordValid = e.target.value.length > 6; const passwordHasNumber = /\d{1}/.test(e.target.value); isFormValid = isPasswordValid && passwordHasNumber; } if(isFormValid){ // if true isFormValid then work this const newUserInfo = {...user}; newUserInfo[e.target.name] = e.target.value; setUser(newUserInfo); } }
const handleSubmit = (e) => { console.log(user.email, user.password); if(user.name && user.password){ //console.log("Form Submitted"); firebase.auth().createUserWithEmailAndPassword(user.email, user.password) .then(res => { console.log(res); const newUserInfo = {...user}; newUserInfo.error = ""; newUserInfo.success = true; setUser(newUserInfo); }) .catch(error => { //Handle Errors here const newUserInfo = {...user}; newUserInfo.error = error.message; newUserInfo.success = false; setUser(newUserInfo); }); } e.preventDefault(); }
return (
Your Email:
Your Password:
{user.error}
{user.success && <p style={{color: "green"}}>Successfully user created!
}export default App;
### toggle sign in and sign up form:
```js
import './App.css';
import { useState } from 'react';
import firebase from "firebase/app";
import "firebase/auth";
// Initialize Firebase
import firebaseConfig from './firebase.config.js';
firebase.initializeApp(firebaseConfig);
function App() {
const [newUser, setNewUser] = useState(false);
const [user, setUser] = useState({
isSignedIn : false,
name: '',
email: '',
password: '',
photo: '',
error: '',
success: false
});
const provider = new firebase.auth.GoogleAuthProvider();
const handleSignIn = () => {
//console.log("handleSignIn clicked");
firebase.auth().signInWithPopup(provider)
.then(res => {
const {displayName, photoURL, email} = res.user;
const signedInUser = {
isSignedIn: true,
name: displayName,
email: email,
photo: photoURL
}
setUser(signedInUser);
console.log(displayName, photoURL, email);
})
.catch(err => {
console.log(err);
console.log(err.message);
});
}
const handleSignOut = () => {
//console.log("handleSignOut clicked");
firebase.auth().signOut()
.then(res => {
const signedOutUser = {
isSignedIn: false,
name: '',
email: '',
photo: ''
}
setUser(signedOutUser);
//console.log(res);
})
.catch(err => {
})
}
const handleChange = (e) => {
let isFormValid = true;
if(e.target.name === "email"){
isFormValid = /\S+@\S+\.\S+/.test(e.target.value);
}
if(e.target.name === "password"){
const isPasswordValid = e.target.value.length > 6;
const passwordHasNumber = /\d{1}/.test(e.target.value);
isFormValid = isPasswordValid && passwordHasNumber;
}
if(isFormValid){
// if true isFormValid then work this
const newUserInfo = {...user};
newUserInfo[e.target.name] = e.target.value;
setUser(newUserInfo);
}
}
const handleSubmit = (e) => {
//console.log(user.email, user.password);
if(newUser && user.email && user.password){
//console.log("Form Submitted");
firebase.auth().createUserWithEmailAndPassword(user.email, user.password)
.then(res => {
console.log(res);
const newUserInfo = {...user};
newUserInfo.error = "";
newUserInfo.success = true;
setUser(newUserInfo);
})
.catch(error => {
//Handle Errors here
const newUserInfo = {...user};
newUserInfo.error = error.message;
newUserInfo.success = false;
setUser(newUserInfo);
});
}
if(!newUser && user.email && user.password){
firebase.auth().signInWithEmailAndPassword(user.email, user.password)
.then(res => {
const newUserInfo = {...user};
newUserInfo.error = "";
newUserInfo.success = true;
setUser(newUserInfo);
})
.catch(error => {
//Handle Errors here
const newUserInfo = {...user};
newUserInfo.error = error.message;
newUserInfo.success = false;
setUser(newUserInfo);
});
}
e.preventDefault();
}
return (
<div className="App">
{
user.isSignedIn ? <button onClick={handleSignOut}>Sign-out</button> :
<button onClick={handleSignIn}>Sign-in</button>
}
{
user.isSignedIn && <div>
<p>Welcome! {user.name}</p>
<p>Your email: {user.email}</p>
<img src={user.photo} alt=""></img>
</div>
}
{/* create simple login form email and password */}
<h2>Our own Firebase Authentication</h2>
<input type="checkbox" onChange={() => setNewUser(!newUser)} name="newUser"/>
<label htmlFor="newUser">New User Sign up</label>
<form action="" onSubmit={handleSubmit}>
{
newUser &&
<input type="text" onChange={handleChange} name="name" placeholder="your name" required/>
}
<br />
<input type="text" onChange={handleChange} name="email" placeholder="your email" required/>
<br />
<input type="password" onChange={handleChange} name="password" placeholder="your passwor" required/>
<br />
<input type="submit" value={Submit} />
</form>
<p style={{color: "red"}}>{user.error}</p>
{user.success && <p style={{color: "blue"}}>Successfully user {newUser ? "created" : "logged in"}!</p>}
</div>
);
}
export default App;
import './App.css';
import { useState } from 'react';
import firebase from "firebase/app";
import "firebase/auth";
// Initialize Firebase
import firebaseConfig from './firebase.config.js';
firebase.initializeApp(firebaseConfig);
function App() {
const [newUser, setNewUser] = useState(false);
const [user, setUser] = useState({
isSignedIn : false,
name: '',
email: '',
password: '',
photo: '',
error: '',
success: false
});
const provider = new firebase.auth.GoogleAuthProvider();
const handleSignIn = () => {
//console.log("handleSignIn clicked");
firebase.auth().signInWithPopup(provider)
.then(res => {
const {displayName, photoURL, email} = res.user;
const signedInUser = {
isSignedIn: true,
name: displayName,
email: email,
photo: photoURL
}
setUser(signedInUser);
console.log(displayName, photoURL, email);
})
.catch(err => {
console.log(err);
console.log(err.message);
});
}
const handleSignOut = () => {
//console.log("handleSignOut clicked");
firebase.auth().signOut()
.then(res => {
const signedOutUser = {
isSignedIn: false,
name: '',
email: '',
photo: ''
}
setUser(signedOutUser);
//console.log(res);
})
.catch(err => {
})
}
const handleChange = (e) => {
let isFormValid = true;
if(e.target.name === "email"){
isFormValid = /\S+@\S+\.\S+/.test(e.target.value);
}
if(e.target.name === "password"){
const isPasswordValid = e.target.value.length > 6;
const passwordHasNumber = /\d{1}/.test(e.target.value);
isFormValid = isPasswordValid && passwordHasNumber;
}
if(isFormValid){
// if true isFormValid then work this
const newUserInfo = {...user};
newUserInfo[e.target.name] = e.target.value;
setUser(newUserInfo);
}
}
const handleSubmit = (e) => {
//console.log(user.email, user.password);
if(newUser && user.email && user.password){
//console.log("Form Submitted");
firebase.auth().createUserWithEmailAndPassword(user.email, user.password)
.then(res => {
console.log(res);
const newUserInfo = {...user};
newUserInfo.error = "";
newUserInfo.success = true;
setUser(newUserInfo);
updateUserName(user.name);
})
.catch(error => {
//Handle Errors here
const newUserInfo = {...user};
newUserInfo.error = error.message;
newUserInfo.success = false;
setUser(newUserInfo);
});
}
if(!newUser && user.email && user.password){
firebase.auth().signInWithEmailAndPassword(user.email, user.password)
.then(res => {
const newUserInfo = {...user};
newUserInfo.error = "";
newUserInfo.success = true;
setUser(newUserInfo);
console.log("sign in user info:", res.user);
})
.catch(error => {
//Handle Errors here
const newUserInfo = {...user};
newUserInfo.error = error.message;
newUserInfo.success = false;
setUser(newUserInfo);
});
}
e.preventDefault();
}
const updateUserName = name => {
const user = firebase.auth().currentUser;
user.updateProfile({
displayName: name
})
.then(function(){
console.log("user name updated!");
})
.catch(function(error){
console.log(error);
})
}
return (
<div className="App">
{
user.isSignedIn ? <button onClick={handleSignOut}>Sign-out</button> :
<button onClick={handleSignIn}>Sign-in</button>
}
{
user.isSignedIn && <div>
<p>Welcome! {user.name}</p>
<p>Your email: {user.email}</p>
<img src={user.photo} alt=""></img>
</div>
}
{/* create simple login form email and password */}
<h2>Our own Firebase Authentication</h2>
<input type="checkbox" onChange={() => setNewUser(!newUser)} name="newUser"/>
<label htmlFor="newUser">New User Sign up</label>
<form action="" onSubmit={handleSubmit}>
{
newUser &&
<input type="text" onChange={handleChange} name="name" placeholder="your name" required/>
}
<br />
<input type="text" onChange={handleChange} name="email" placeholder="your email" required/>
<br />
<input type="password" onChange={handleChange} name="password" placeholder="your passwor" required/>
<br />
<input type="submit" value={newUser ? "Sign-up" : "Sign-in"} />
</form>
<p style={{color: "red"}}>{user.error}</p>
{user.success && <p style={{color: "blue"}}>Successfully user {newUser ? "created" : "logged in"}!</p>}
</div>
);
}
export default App;
<p>add facebook sign in method at firebase project</p>
<p>Follow docs - Facebook login</p>
For get app id & app secret
https://developers.facebook.com/ > Get started/My Apps > Create app > Consumer- Details > Display name+app contact email > Create app > password > Facebook Login-setup > Web > Settings > Basic > App ID,App Secret - copy & paste at firebase facebook sign in method and bellow auth/handler link of here copy & paste at https://developers.facebook.com/apps/1379295039266907/fb-login/settings/ - Valid OAuth Redirect URIs field >
Save changes >
const provider = new firebase.auth.FacebookAuthProvider();
// function
const handleFbSignIn = () => {
firebase.auth().signInWithPopup(fbProvider)
.then(function(result){
const user = result.user;
console.log("fb user after sign in:", user);
})
.catch(function(error){
})
}
<button onClick={handleFbSignIn}>Sign-in with Facebook</button>