I have the following question as to how I could be solving this problem with the property uid with authentication via facebook / firebase. This displays the error message in the command prompt according to the image.
Print Error Prompt
Services
'use strict';
app.factory('Auth', function ($firebaseAuth, $firebaseObject, $firebaseArray, $state, $http, $q, $cordovaOauth) {
var ref = firebase.database().ref();
var auth = $firebaseAuth();
var Auth = {
createProfile: function(uid, profile) {
return ref.child('profiles').child(uid).set(profile);
},
getProfile: function(uid) {
return $firebaseObject(ref.child('profiles').child(uid));
},
login: function() {
var provider = new firebase.auth.FacebookAuthProvider();
provider.addScope('public_profile, email, user_location, user_birthday, user_photos, user_about_me');
// return auth.$signInWithPopup(provider)
// .then(function(result) {
$cordovaOauth.facebook("1455510817798096", ["public_profile", "email", "user_location", "user_birthday", "user_photos", "user_about_me"])
.then(function (result) {
//var accessToken = result.credential.accessToken;
var user = Auth.getProfile(result.user.uid).$loaded();
//ver ideia do tairone pra ver o que acontece
// var user = Auth.getProfile(result.user).$loaded();
user.then(function(profile) {
if (profile.name == undefined) {
var genderPromise = $http.get('https://graph.facebook.com/me?fields=gender&access_token=' + accessToken);
var birthdayPromise = $http.get('https://graph.facebook.com/me?fields=birthday&access_token=' + accessToken);
var locationPromise = $http.get('https://graph.facebook.com/me?fields=location&access_token=' + accessToken);
var bioPromise = $http.get('https://graph.facebook.com/me?fields=about&access_token=' + accessToken);
var imagesPromise = $http.get('https://graph.facebook.com/me/photos/uploaded?fields=source&access_token=' + accessToken);
var promises = [genderPromise, birthdayPromise, locationPromise, bioPromise, imagesPromise];
$q.all(promises).then(function(data) {
var info = result.user.providerData[0];
var profile = {
name: info.displayName,
email: info.email,
avatar: info.photoURL,
gender: data[0].data.gender ? data[0].data.gender : "",
birthday: data[1].data.birthday ? data[1].data.birthday : "",
age: data[1].data.birthday ? Auth.getAge(data[1].data.birthday) : "",
location: data[2].data.location ? data[2].data.location.name : "",
bio: data[3].data.about ? data[3].data.about : "",
images: data[4].data.data
}
Auth.createProfile(result.user.uid, profile);
//mudar a profile tambem mudando ideia tairone
//Auth.createProfile(result.user, profile);
});
}
});
});
},
logout: function() {
return auth.$signOut();
},
getAbout: function(access_token) {
return $http.get('https://graph.facebook.com/me?fields=bio&access_token=' + access_token);
},
getAge: function(birthday) {
return new Date().getFullYear() - new Date(birthday).getFullYear();
},
requireAuth: function() {
return auth.$requireSignIn();
},
getProfilesByAge: function(age) {
return $firebaseArray(ref.child('profiles').orderByChild('age').startAt(18).endAt(age));
},
getProfiles: function(){
return $firebaseArray(ref.child('profiles'));
}
};
auth.$onAuthStateChanged(function(authData) {
if(authData) {
console.log('Este usuario ja se encontra logado!');
} else {
$state.go('login');
console.log('Este usuario ainda nao se encontra logado no aplicativo da cleo.');
}
});
return Auth;
});
Controller
'use strict';
app.controller('AuthCtrl', function(Auth, $state) {
var auth = this;
auth.login = function() {
console.log('Usuario clicou no botao para realizar login!');
// return Auth.login().then(function(user) {
return Auth.login(function(user) {
$state.go('app.home');
});
};
auth.logout = function() {
Auth.logout();
};
});
Related
The following works fine, but I have noticed that it is really slow login in a client. How can I make it faster?
import NextAuth from "next-auth"
import CredentialsProvider from "next-auth/providers/credentials"
import { ObjectId } from 'mongodb'
import { MongoDBAdapter } from "#next-auth/mongodb-adapter"
import clientPromise from "../../../lib/mongodb";
import { v4 as uuidv4 } from 'uuid';
var CryptoJS = require("crypto-js");
const sFinder = async (task, token) => {
try{
const client = await clientPromise;
const database = client.db('DRN1');
const ses = await database.collection('sessions');
switch (task) {
case 1:
const result = await ses.find({
"userId": ObjectId(token.uuid)
}).sort({"_id":-1}).limit(1).toArray();
if (!result) {
return 202;
}
else{
return result[0].sessionToken
}
break;
case 2:
const insertResult = await ses.insertOne({"userId":token.uuid, "sessionToken":token.accessToken});
if (!insertResult) {
return 203;
}
else{
return insertResult
}
break;
case 3:
var expdate = new Date(token.exp * 1000);
const UpdateResult = await ses.updateOne({"userId":ObjectId(token.uuid), "sessionToken":token.accessToken},
{ $set: {"expires": expdate}}, { upsert: true });
if (!UpdateResult) {
return 203;
}
else{
return UpdateResult
}
break;
default:
break;
}
} catch(e){
console.error(e);
}
}
export default NextAuth({
adapter: MongoDBAdapter(clientPromise),
session: {
strategy: 'jwt',
jwt: true,
},
providers: [
CredentialsProvider({
name: 'DRN1',
credentials: {
username: { label: "Username", type: "text"},
password: { label: "Password", type: "password" }
},
async authorize(credentials, req) {
try{
const client = await clientPromise;
const database = client.db('DRN1');
const users = await database.collection('users');
const result = await users.findOne({
username: credentials.username,
});
if (!result) {
throw new Error('No user found with the username');
}
var bytes = CryptoJS.AES.decrypt(result.password, process.env.PASS_ENC);
var decryptedData = bytes.toString(CryptoJS.enc.Utf8);
//Check hased password with DB password
if(decryptedData != credentials.password){
throw new Error('Password doesnt match');
}
return {uuid:result._id, username: result.username, email: result.email, type:result.type, "sessionID":uuidv4()};
} catch(e){
console.error(e)
}
}
})
],
callbacks: {
signIn: async ({ user, account, profile, email, credentials }) => {
account.accessToken = user.sessionID
account.uuid = user.uuid
const test = await sFinder(2,account)
return true
},
jwt: async ({ token, account }) => {
if (account) {
token.uuid = account.uuid
token.accessToken = account.accessToken
}
const lastUsedToken = await sFinder(1,token)
const updateTokenExpire = await sFinder(3,token)
if(lastUsedToken != token.accessToken){
// console.log("I have made it an error")
token.error = 555;
}
return token
},
session: async ({ session, token, user }) => {
session.uuid = token.uuid
if(!token.accessToken){
//OAUTH Accounts
session.accessToken = uuidv4()
}else{
session.accessToken = token.accessToken
}
if(token.error == 555){
session.error = 555
}
return session
}
},
pages:{
error: 'signin'
},
theme: {
colorScheme: "dark", // "auto" | "dark" | "light"
brandColor: "", // Hex color code
logo: "https://storage.googleapis.com/radiomedia-images/station_logos/v2/DRN1_small.png" // Absolute URL to image
}
});
I believe what is slowing it down is the following
callbacks: {
signIn: async ({ user, account, profile, email, credentials }) => {
account.accessToken = user.sessionID
account.uuid = user.uuid
const test = await sFinder(2,account)
return true
},
jwt: async ({ token, account }) => {
if (account) {
token.uuid = account.uuid
token.accessToken = account.accessToken
}
const lastUsedToken = await sFinder(1,token)
const updateTokenExpire = await sFinder(3,token)
if(lastUsedToken != token.accessToken){
// console.log("I have made it an error")
token.error = 555;
}
return token
},
session: async ({ session, token, user }) => {
session.uuid = token.uuid
if(!token.accessToken){
//OAUTH Accounts
session.accessToken = uuidv4()
}else{
session.accessToken = token.accessToken
}
if(token.error == 555){
session.error = 555
}
return session
}
},
Mainly all the awaits, but the await functions are to make sure the user is not login on another device. As we log the old devices out automatically.
I've an issue with the Forge viewer I'm developping : Im' trying to host it using Github-page, but it doesn't seem to work correctly.
The issue is on the File tree : when I load the viewer page from the Github pages, the file tree seems stuck on "Loading...". However, it correctly loads when I load the page from localhost.
The code of the File tree :
$(document).ready(function () {
prepareAppBucketTree();
$('#refreshBuckets').click(function () {
$('#appBuckets').jstree(true).refresh();
});
$('#createNewBucket').click(function () {
createNewBucket();
});
$('#createBucketModal').on('shown.bs.modal', function () {
$("#newBucketKey").focus();
})
$('#hiddenUploadField').change(function () {
var node = $('#appBuckets').jstree(true).get_selected(true)[0];
var _this = this;
if (_this.files.length == 0) return;
var file = _this.files[0];
switch (node.type) {
case 'bucket':
var formData = new FormData();
formData.append('fileToUpload', file);
formData.append('bucketKey', node.id);
$.ajax({
url: '/api/forge/oss/objects',
data: formData,
processData: false,
contentType: false,
type: 'POST',
success: function (data) {
$('#appBuckets').jstree(true).refresh_node(node);
_this.value = '';
}
});
break;
}
});
});
function createNewBucket() {
var bucketKey = $('#newBucketKey').val();
var policyKey = $('#newBucketPolicyKey').val();
console.log(bucketKey)
jQuery.post({
url: '/api/forge/oss/buckets',
contentType: 'application/json',
data: JSON.stringify({ 'bucketKey': bucketKey, 'policyKey': policyKey }),
success: function (res) {
$('#appBuckets').jstree(true).refresh();
$('#createBucketModal').modal('toggle');
},
error: function (err) {
if (err.status == 409)
alert('Bucket already exists - 409: Duplicated')
console.log(err);
}
});
}
function prepareAppBucketTree() {
$('#appBuckets').jstree({
'core': {
'themes': { "icons": true },
'data': {
"url": '/api/forge/oss/buckets',
"dataType": "json",
'multiple': false,
"data": function (node) {
return { "id": node.id };
}
}
},
'types': {
'default': {
'icon': 'glyphicon glyphicon-question-sign'
},
'#': {
'icon': 'glyphicon glyphicon-cloud'
},
'bucket': {
'icon': 'glyphicon glyphicon-folder-open'
},
'object': {
'icon': 'glyphicon glyphicon-file'
}
},
"plugins": ["types", "state", "sort", "contextmenu"],
contextmenu: { items: autodeskCustomMenu }
}).on('loaded.jstree', function () {
$('#appBuckets').jstree('open_all');
}).bind("activate_node.jstree", function (evt, data) {
if (data != null && data.node != null && data.node.type == 'object') {
// $("#MyViewerDiv").empty();
var urn = data.node.id;
getForgeToken(function (access_token) {
jQuery.ajax({
url: 'https://developer.api.autodesk.com/modelderivative/v2/designdata/' + urn + '/manifest',
headers: { 'Authorization': 'Bearer ' + access_token },
success: function (res) {
if (res.status === 'success') callByUrn('urn:'+urn);
else $("#MyViewerDiv").html('The translation job still running: ' + res.progress + '. Please try again in a moment.');
},
error: function (err) {
var msgButton = 'This file is not translated yet! ' +
'<button class="btn btn-xs btn-info" onclick="translateObject()"><span class="glyphicon glyphicon-eye-open"></span> ' +
'Start translation</button>'
$("#MyViewerDiv").html(msgButton);
}
});
})
}
});
}
function autodeskCustomMenu(autodeskNode) {
var items;
switch (autodeskNode.type) {
case "bucket":
items = {
uploadFile: {
label: "Upload file",
action: function () {
uploadFile();
},
icon: 'glyphicon glyphicon-cloud-upload'
}
};
break;
case "object":
items = {
translateFile: {
label: "Translate",
action: function () {
var treeNode = $('#appBuckets').jstree(true).get_selected(true)[0];
translateObject(treeNode);
},
icon: 'glyphicon glyphicon-eye-open'
}
};
break;
}
return items;
}
function uploadFile() {
$('#hiddenUploadField').click();
}
function translateObject(node) {
$("#MyViewerDiv").empty();
if (node == null) node = $('#appBuckets').jstree(true).get_selected(true)[0];
var bucketKey = node.parents[0];
var objectKey = node.id;
jQuery.post({
url: '/api/forge/modelderivative/jobs',
contentType: 'application/json',
data: JSON.stringify({ 'bucketKey': bucketKey, 'objectName': objectKey }),
success: function (res) {
$("#MyViewerDiv").html('Translation started! Please try again in a moment.');
},
});
}
Please note that Github Pages are used for serving static pages without any special server-side logic. Your Forge application requires a server to talk to as well, for example, to obtain a list of buckets for the tree view (by making a request to /api/forge/oss/buckets).
You could potentially host your application's server-side logic on something like Heroku, and then have your static HTML/CSS/JavaScript page on Github talk to that server (for example, https://my-forge-app.herokuapp.com/api/forge/oss/buckets). Just be careful about CORS.
I want to ask you for help.
App running on localhost great.
but on the server is not added "isAdmin" : true, to the mongoDB. When you add admin.
Why? Where is the problem ?
localhost:
{
"_id" : ObjectId("57b174723e755f5dfe36d8b0"),
"salt" : "63855ff664682ad1e8ed77ded97ca5b92da472e9f0f7d68dcb058f35e71d38a4",
"hash" : "03da57be47c9ab1c9657ae9cd5ac3d8b63d56c808e28b51d6f5166bf27d8df99a2e6c25d809fcbd2436b5b883b4a64bd835ea588348d920346d9b3b601c965b90ff23b67687118b56a2b3e35343eb4b693131f7f51f7d1c9bdb4989364477b237f49d496505592564a5c3d88a0b559dc65e5543df06e4c22da50589e6551b69c2406db093a7ef78d31bc8bb8a5423ed4b677913642e0cd335992d222c49e5c58c3450068bd5a2e1cab82a9f73829f695b4686bc76f52c76e0b6ea4f248cb7e8663a96900e5d845773f3a4f09f7988a6ae24fbbdbb0ca7e670a51acd3f9b8c06f533b8c851c40680bd7156d00fe1407acf4879d8095591e8dce3a5379e041a90acb04edecafb38b0093e20db5dc41cd803ae70f351c9e8146d0e959d10114e586a370cd8063e47cc29367af9574e1a20d3973ab4be8d5a16b8a35d89c3534cdf745adfc65cd1d769811a421ea9654884dee289807e518b7eb7ba4c3e5f59242f98df6ccb3f09a9824e8679aec579a8c9a1498fc5819a2e1e8ab2f3cbf866f0e736e5c0b855d9d0f80b462fd50bf7ebf402530aaed84d6f7db5885098124ffa225563517c276563fd7eb3b058cb1f2472896a0b322bdd3b552229a677c45847667b952807ab873e5d2356297514c85cd4c3b3fac3bc3ac16d93033546fa9096e4b738f7eabd1c3494f902d0817b977116f612b3ee9040e0f9cab7e35543a42dc30",
"username" : "mail#gmail.com",
"displayName" : "Admin",
"isAdmin" : true,
"__v" : 0
}
server:
{
"_id" : ObjectId("57b174723e755f5dfe36d8b0"),
"salt" : "63855ff664682ad1e8ed77ded97ca5b92da472e9f0f7d68dcb058f35e71d38a4",
"hash" : "03da57be47c9ab1c9657ae9cd5ac3d8b63d56c808e28b51d6f5166bf27d8df99a2e6c25d809fcbd2436b5b883b4a64bd835ea588348d920346d9b3b601c965b90ff23b67687118b56a2b3e35343eb4b693131f7f51f7d1c9bdb4989364477b237f49d496505592564a5c3d88a0b559dc65e5543df06e4c22da50589e6551b69c2406db093a7ef78d31bc8bb8a5423ed4b677913642e0cd335992d222c49e5c58c3450068bd5a2e1cab82a9f73829f695b4686bc76f52c76e0b6ea4f248cb7e8663a96900e5d845773f3a4f09f7988a6ae24fbbdbb0ca7e670a51acd3f9b8c06f533b8c851c40680bd7156d00fe1407acf4879d8095591e8dce3a5379e041a90acb04edecafb38b0093e20db5dc41cd803ae70f351c9e8146d0e959d10114e586a370cd8063e47cc29367af9574e1a20d3973ab4be8d5a16b8a35d89c3534cdf745adfc65cd1d769811a421ea9654884dee289807e518b7eb7ba4c3e5f59242f98df6ccb3f09a9824e8679aec579a8c9a1498fc5819a2e1e8ab2f3cbf866f0e736e5c0b855d9d0f80b462fd50bf7ebf402530aaed84d6f7db5885098124ffa225563517c276563fd7eb3b058cb1f2472896a0b322bdd3b552229a677c45847667b952807ab873e5d2356297514c85cd4c3b3fac3bc3ac16d93033546fa9096e4b738f7eabd1c3494f902d0817b977116f612b3ee9040e0f9cab7e35543a42dc30",
"username" : "mail#gmail.com",
"displayName" : "Admin",
"__v" : 0
}
Model
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var passportLocalMongoose = require('passport-local-mongoose');
var User = new Schema({
username: String,
password: String,
displayName: String,
isAdmin: Boolean
}, {
toObject: { virtuals: true },
toJSON: { virtuals: true }
});
User.virtual("token").set(function(token) {
this._token = token;
}).get(function() { return this._token; });
User.plugin(passportLocalMongoose);
module.exports = mongoose.model("User", User);
RegisterController
app.controller("RegisterController",
[
"$scope", "$location", "Account", "Session",
function($scope, $location, account, session) {
$scope.registerForm = {
name: undefined,
email: undefined,
password: undefined,
confirmPassword: undefined,
errorMessage: undefined
};
$scope.register = function() {
account.register($scope.registerForm.name, $scope.registerForm.email, $scope.registerForm.password, $scope.registerForm.confirmPassword)
.then(function(res) {
session.setUserData(res);
$location.path("/");
}, function(response) {
$scope.registerForm.errorMessage = response.message;
});
};
}
]);
Service session
app.factory("Session", ["$http", function ($http) {
return {
getToken: function() {
var value = sessionStorage.getItem("token");
if (value) return value;
return undefined;
},
getEmail: function() {
var value = sessionStorage.getItem("email");
if (value) return value;
return undefined;
},
getIsAdmin: function() {
var value = sessionStorage.getItem("isAdmin");
if (value) return value == "true";
return undefined;
},
setUserData: function(user) {
sessionStorage.setItem("token", user.token);
sessionStorage.setItem("email", user.username);
$http.defaults.headers.common["Authorization"] = "Bearer " + user.token;
if (user.isAdmin) {
sessionStorage.setItem("isAdmin", "true");
}
},
clear: function() {
sessionStorage.clear();
$http.defaults.headers.common["Authorization"] = undefined;
}
};
}]);
I'm unable to get the email address from facebook when i'm making the following call...
// https://developers.facebook.com/docs/
// https://developers.facebook.com/docs/reference/login/
facebook: function(req, res) {
passport.authenticate('facebook', { scope : ['email'] }, function(err, user) {
req.logIn(user, function(err) {
if (err) {
return;
}
res.redirect('/');
return;
});
})(req, res);
},
This is how the response is handled and is basically the PassportJS docs code.
customMiddleware: function(app) {
passport.use(new FacebookStrategy({
clientID: "5xxxxxxxxxxxxx6",
clientSecret: "exxxxxxxxxxxxxxxxxxxxxxxxxxxd9",
callbackURL: "http://localhost:1337/auth/facebook/callback"
}, verifyHandler));
app.use(passport.initialize());
app.use(passport.session());
}
And here is the handler.
var passport = require('passport')
, FacebookStrategy = require('passport-facebook').Strategy;
var verifyHandler = function(token, tokenSecret, profile, done) {
process.nextTick(function() {
sails.log.info(profile);
Serviceseeker.findOne({uid: profile.id}, function(err, serviceseeker) {
if (serviceseeker) {
return done(null, serviceseeker);
}
else {
var data = {
provider: profile.provider,
uid: profile.id,
name: profile.displayName
};
if (profile.emails && profile.emails[0] && profile.emails[0].value) {
data.email = profile.emails[0].value;
}
if (profile.name && profile.name.givenName) {
data.firstName = profile.name.givenName;
}
if (profile.name && profile.name.familyName) {
data.lastName = profile.name.familyName;
}
Serviceseeker.create(data, function(err, serviceseeker) {
return done(err, serviceseeker);
});
}
});
});
};
And this is the response that I'm getting
info: info: { id: '1xxxxxxxxxxxxxx9',
username: undefined,
displayName: 'Txxxx Slxxxxn',
name:
{ familyName: undefined,
givenName: undefined,
middleName: undefined },
gender: undefined,
profileUrl: undefined,
provider: 'facebook',
_raw: '{"name":"Txxxx Slxxxxn","id":"1xxxxxxxxxxxxxx9"}',
_json: { name: 'Txxxx Slxxxxn', id: '1xxxxxxxxxxxxxx9' } }
Did you try:
passport.use(new FacebookStrategy({
clientID: 'CLIENT_ID',
clientSecret: 'CLIENT_SECRET',
callbackURL: "http://www.example.com/auth/facebook/callback"
passReqToCallback : true,
profileFields: ['id', 'emails', 'name'] //This
},
/**
*
* #TODO: Make several files for the controllers if we have so many script
*
*/
angular.module('starter.controllers', ['ui.router'])
.controller('HomeCtrl', function($scope, $stateParams) {
})
.controller('RegistreCtrl', function($scope, $stateParams) {
})
.controller('FacturerCtrl', function($scope, $stateParams) {
})
.controller('DocumentsCtrl', function($scope, $stateParams) {
})
.controller('ParametresCtrl', function($scope, $stateParams) {
})
//controller pour connection to API
.controller('LoginConnect', ['$scope','connecting','sendtoken','$state','$stateParams',
function($scope,connecting,sendtoken,$state){
$scope.user = {};
var users = $scope.user;
$scope.connect = function (users,$state) {
var log = $scope.user.login;
var pass = $scope.user.password;
var mydata = {};
connecting.login(log,pass).then(function(result){
console.log(result);
var montoken = result.data.token;
sessionStorage.setItem('token',montoken);
console.log(montoken);
});
var mytoken = sessionStorage.getItem('token');
console.log(mytoken);
sendtoken.send(mytoken).then(function(userdata){
$scope.datab = userdata;
if($scope.datab = userdata){
$state.go('app.registre');
};
// var datauser = sessionStorage.getItem('myuserdata');
// if (datauser != ''){
// $state.transitionTo("app.registre");
// };
});
};
}
// function($location){
// if()
// $location.url("/home");
// }
])
//factory pour aller chercher le token
.factory('connecting', ['$http','$q', function ($http,$q){
var ConnectingFactory = {};
ConnectingFactory.login = function(log,pass){
var deferred = $q.defer();
$http({
method: 'POST',
url: "http://api.tiime-ae.fr/0.1/request/login.php",
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
transformRequest: function(obj) {
var str = [];
for(var p in obj)
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
return str.join("&");
},
data: {login: log, password: pass}
})
.success(function(result){
deferred.resolve(result);
// var promise = deferred.promise;
// promise.then(function(result){
// var mydata = result["data"];
// console.log(mydata);
// }
//);
});
return deferred.promise;
};
return ConnectingFactory;
}])
//END factory pour aller chercher le token
//Factory pour envoyer le token
.factory('sendtoken', ['$http','$q', function ($http,$q){
var tokenreceipt = {};
tokenreceipt.send = function(mytoken){
var deferred = $q.defer();
$http({
method: 'POST',
url: "http://api.tiime-ae.fr/0.1/request/settings-get.php",
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
transformRequest: function(obj) {
var str = [];
for(var p in obj)
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
return str.join("&");
},
data: {token : mytoken}
})
.success(function(userdata){
deferred.resolve(userdata);
// var promise = deferred.promise;
// promise.then(function(result){
// var mydata = result["data"];
// console.log(mydata);
// }
//);
});
return deferred.promise;
};
return tokenreceipt;
}]);
//END Factory pour envoyer le token
;
and my app.js:
.config(function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('app', {
url: '/app',
abstract: true,
templateUrl: 'templates/menu.html'
})
.state('app.login', {
cache:false,
url: '/login',
views: {
'menuContent': {
templateUrl: 'templates/form-connection.html',
controller: 'LoginConnect'
}
}
})
.state('app.registre', {
url: '/registre',
views: {
'menuContent': {
templateUrl: 'templates/registre.html',
controller: 'RegistreCtrl'
}
}
})
.state('app.home', {
url: '/home',
views: {
'menuContent': {
templateUrl: 'templates/home.html',
controller: 'HomeCtrl'
}
}
})
.state('app.facturer', {
url: '/facturer',
views: {
'menuContent': {
templateUrl: 'templates/facturer.html',
controller: 'FacturerCtrl'
}
}
})
.state('app.documents', {
url: '/documents',
views: {
'menuContent': {
templateUrl: 'templates/documents.html',
controller: 'DocumentsCtrl'
}
}
})
.state('app.parametres', {
url: '/parametres',
views: {
'menuContent': {
templateUrl: 'templates/parametres.html',
controller: 'ParametresCtrl'
}
}
});
// if none of the above states are matched, use this as the fallback
$urlRouterProvider.otherwise('/app/login');
});
Hi, here is my problem, i don t know how to change the view only when i retrieve my data. It says : "Cannot read property 'path' of undefined". Because i want that : when my function is success, the path change and send me to the home page. Do you have an idea ? I would really appreciate !
You can create you factories in simple way and return promises to controller i think it's controllers job to handle promises.
And this will solve your routing problem also as the success will be the part of controller not of factory
factory('AuthHttpSvcs', function($http, $location, $rootScope) {
return {
login: function(loginData) {
//return the promise directly.
return $http({
method: 'POST',
url: 'YOUR_URL',
data: loginData
}).then(function(result) {
//returns object with every detail.
return result;
});
}
}
});