2

I am using MVC 4 Hot towel template, i have solved it MVC way right now, where i have _viewStart.cshtml:

@{
if (User.Identity.IsAuthenticated)
{
    Layout = "~/Views/Shared/_Layout.cshtml";
    Page.Title = "Home1";
}
else
{
    Layout = "~/Views/Shared/_loginLayout.cshtml";
    Page.Title = "Home2";
}}

and in the index.cshtml:

@using System.Web
@using System.Web.Optimization
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <meta name="apple-mobile-web-app-status-bar-style" content="black" />
    <meta name="format-detection" content="telephone=no"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

<script type="text/javascript">
        if (navigator.userAgent.match(/IEMobile\/10\.0/)) {
            var msViewportStyle = document.createElement("style");
            var mq = "@@-ms-viewport{width:auto!important}";
            msViewportStyle.appendChild(document.createTextNode(mq));
            document.getElementsByTagName("head")[0].appendChild(msViewportStyle);
        }
    </script>


    @if (@User.Identity.IsAuthenticated)
    {
    <div id="applicationHost">
        @Html.Partial("_splash")
    </div>

   @Scripts.Render("~/scripts/vendor");
        if(HttpContext.Current.IsDebuggingEnabled) {
            @Html.AntiForgeryToken()
            <script>
                window.userId = "@User.Identity.Name";
                console.log(window.userId);
            </script>
            <script type="text/javascript" src="~/App/durandal/amd/require.js" data-main="@Url.Content("~/App/main")"></script>

        } else {
            <!-- Remember to run the Durandal optimizer.exe to create the main-built.js  -->
            <script type="text/javascript" src="~/App/main-built.js"></script>
        }
    }
    else
    {
        <script src="~/Scripts/jquery-1.9.1.min.js"></script>

            <div id="login">
              <p>hello world</p>
            </div>
        }

Ive created a separate viewmodel user for login:

define(['services/logger'], function (logger) {
    var vm = {
        activate: activate(),
        userName: ko.observable(),
        password: ko.observable()
    };

    return vm;

    //#region Internal Methods
    function activate() {
        logger.log('login View Activated', null, 'login', true);
        return true;
    }
    //#endregion
});

and created login view:

<section>
    <h2>My login model without content yet</h2>
</section>

(i know i am not using viewmodel in this view, but its only for test)

How do i do same functionality in Durandal? and is it even possible?

No hate, i am new to Single page application and durandal + breeze.js + knockout.

Timsen
  • 4,066
  • 10
  • 59
  • 117
  • 1
    Did you see @Evan-Larsen http://stackoverflow.com/questions/15829657/mvc-authentication-and-antiforgery-token-with-durandal-spa-template – RainerAtSpirit Jun 08 '13 at 19:18

1 Answers1

0

I would suggest using the built in ASP.net authentication / login mechanisms - ie <authentication> in web.config.

I found https://github.com/jamesc88/Durandal_Serverside_Authentication useful.

podiluska
  • 50,950
  • 7
  • 98
  • 104