2014-09-04 1 views
0

Я прочитал Durandal login page redirect pattern ничего себе, много кода, чтобы сделать то, что я думаю, будет довольно просто.Как я могу создать отдельную страницу входа, используя Durandal, которая имеет другой макет, чем оболочка?

Я также прочитал https://groups.google.com/forum/#!topic/durandaljs/RdGpwIm1oOU, так как я хотел бы, чтобы страница входа в систему имела простой логотип с формой входа в систему, но мне также хотелось бы проложить маршрут для регистрации и о странице. Остальная часть моего сайта будет иметь меню, заголовок и т. Д., Которые я не хочу показывать до тех пор, пока пользователь не войдет в систему. Кроме того, я не знаю, как этот подход будет обновляться при входе пользователя в систему.

Другой пример кода, который почти делает то, что я хочу сделать: https://github.com/Useful-Software-Solutions-Ltd/Durandal451/blob/master/Durandal451v2/App/global/session.js

Итак, что мне делать? Есть ли официальный способ сделать это? Там, кажется, есть мишень из вещей, которые люди пытались. Я бы подумал, что это будет очень распространенное явление, но не может найти ничего в основных документах.

ответ

0

Я не уверен, что это самый простой способ, но это то, что я получил

вам нужно будет добавить некоторые дополнительные функции после app.start() срабатывает.

main.js

var auth = require('authentication'); // Authentication module 

app.start().then(function() 
{ 
    // This function will wait for the promise 
    auth.init().then(function(data) 
    { 
     // When successfully authenticate, set the root to shell 
     app.setRoot('views/shell'); 
    } 
}); 

authentication.js

define(function(require) 
{ 
    var app = require('durandal/app'); 

    return { 
    init: function() 
    { 
     // Initialize authentication... 

     return system.defer(function(dfd) 
     { 
      // Check if user is authenticate or if there has stored token 
      var isAuthenticate = someOtherFunctiontoCheck(); 

      if (isAuthenticate) 
      { 
       dfd.resolve(true); // return promise 
      } 
      else 
      { 
       // When not authenticate, set root to login page 
       app.setRoot('views/login'); 
      } 
     } 
    } 
    }; 
}); 

удачи! :)

UPDATE

login.js

define(function(require) 
{ 
    var ko = require('knockout'); 
    var auth = require('authentication'); 

    var username = ko.observable(); 
    var password = ko.observable(); 

    return { 
     username: username, 
     password: password, 
     submitForm: function() 
     { 
     // Do a login, if success, auth module will take care of it 
     // and here will take of the error 
     auth.login(username(), password()).error(function() 
     { 
      // notify user about the error (e.g invalid credentials) 
     }); 
     } 
    }; 
}); 

Authentication.js

define(function(require) 
{ 
    var app = require('durandal/app'); 

    return { 
    init: function() 
    { 
     // Initialize authentication... 

     return system.defer(function(dfd) 
     { 
      // Check if user is authenticate or if there has stored token 
      var isAuthenticate = someOtherFunctiontoCheck(); 

      if (isAuthenticate) 
      { 
       dfd.resolve(true); // return promise 
      } 
      else 
      { 
       // When not authenticate, set root to login page 
       app.setRoot('views/login'); 
      } 
     } 
    }, 
    login: function(username, password) 
    { 
     // do authenticate for login credentials (e.g for retrieve auth token) 
     return $.ajax({ 
      url : 'api/login', 
      type : 'POST', 
      data : { 
       username: username, 
       password: password 
      } 
     }).then(function(token){ 
      // on success, stored token and set root to shell 
      functionToStoreToken(token); 

      // Set root to shell 
      app.setRoot('views/shell'); 
     }); 
    } 
    }; 
}); 
+0

Что ваш логин выглядеть? Я бы предположил, что это еще одна оболочка? У вас есть раздельная маршрутизация до и после (это будет действительно круто)? Как это отредактировать обновление для переключения root, только при успешном входе в систему? В противном случае ваш пример выглядит довольно устрашающим, а не сложным. – rball

+0

Ответ: ДА, вы можете увидеть обновленный ответ. :) –

Смежные вопросы