diff --git a/reviewboard/static/rb/js/models/draftResourceModelMixin.js b/reviewboard/static/rb/js/models/draftResourceModelMixin.js
index 1e2747b3c6003f8c448950c25a43281953475bd2..80fd801c948a561ca2bb41c8f9e33ab93728385f 100644
--- a/reviewboard/static/rb/js/models/draftResourceModelMixin.js
+++ b/reviewboard/static/rb/js/models/draftResourceModelMixin.js
@@ -123,6 +123,16 @@ RB.DraftResourceModelMixin = {
     _retrieveDraft: function(options, context) {
         var self = this;
 
+        if (!RB.UserSession.instance.get('authenticated')) {
+            if (options.error) {
+                options.error.call(this, {
+                    errorText: 'You must be logged in to retrieve the draft.'
+                });
+            }
+
+            return;
+        }
+
         Backbone.Model.prototype.fetch.call(this, {
             success: function() {
                 /*
diff --git a/reviewboard/static/rb/js/models/userSessionModel.js b/reviewboard/static/rb/js/models/userSessionModel.js
index ab69d3d02e4a6d8d3fca3c5e3844e8f5975fa37a..ed84020532ea290566feba80c3f31fc8a7d06d28 100644
--- a/reviewboard/static/rb/js/models/userSessionModel.js
+++ b/reviewboard/static/rb/js/models/userSessionModel.js
@@ -108,6 +108,7 @@ RB.UserSession = Backbone.Model.extend({
     defaults: {
         authenticated: false,
         fullName: null,
+        loginURL: null,
         username: null,
         userPageURL: null,
         sessionURL: null,
diff --git a/reviewboard/static/rb/js/views/commentDialogView.js b/reviewboard/static/rb/js/views/commentDialogView.js
index 359b3e7b41606ed5a3dc571eb12603813c3669fe..5bf56470ecb6bc358ecb96dbc36196805cb6404e 100644
--- a/reviewboard/static/rb/js/views/commentDialogView.js
+++ b/reviewboard/static/rb/js/views/commentDialogView.js
@@ -91,7 +91,31 @@ RB.CommentDialogView = Backbone.View.extend({
     FORM_BOX_WIDTH: 380,
 
     className: 'comment-dlg',
-    template: _.template($('#comment-dlg-template').html()),
+    template: _.template([
+        '<div class="other-comments">',
+        ' <h1 class="title">Other reviews</h1>',
+        ' <ul></ul>',
+        '</div>',
+        '<form method="post">',
+        ' <h1 class="title">Your comment</h1>',
+        '<% if (!authenticated) { %>',
+        ' <p class="login-text">',
+        '  You must <a href="<%= loginURL %>">log in</a> to post a comment.',
+        ' </p>',
+        '<% } %>',
+        ' <textarea name="text" rows="6" cols="30"></textarea>',
+        ' <div class="comment-issue-options">',
+        '  <input type="checkbox" name="comment_issue" />',
+        '  <label for="comment_issue">Open an <u>i</u>ssue</label>',
+        ' </div>',
+        ' <div class="status"></div>',
+        ' <div class="buttons">',
+        '  <input type="button" class="save" value="Save" disabled="true" />',
+        '  <input type="button" class="cancel" value="Cancel" />',
+        '  <input type="button" class="delete" value="Delete" disabled="true" />',
+        ' </div>',
+        '</form>'
+    ].join('')),
 
     events: {
         'click .buttons .cancel': '_onCancelClicked',
@@ -106,11 +130,16 @@ RB.CommentDialogView = Backbone.View.extend({
     },
 
     render: function() {
+        var userSession = RB.UserSession.instance;
+
         this.options.animate = (this.options.animate !== false);
 
         this.$el
             .hide()
-            .html(this.template());
+            .html(this.template({
+                authenticated: userSession.get('authenticated'),
+                loginURL: userSession.get('loginURL')
+            }));
 
         this._$draftForm    = this.$el.find('form');
         this._$commentsPane = this.$el.find('.other-comments');
diff --git a/reviewboard/static/rb/js/views/tests/commentDialogViewTests.js b/reviewboard/static/rb/js/views/tests/commentDialogViewTests.js
index 0539a2ba26140f3a275e90bf9ba14811abba3f52..4172bf4573a5d329fb40c38b18162ccb24abd87f 100644
--- a/reviewboard/static/rb/js/views/tests/commentDialogViewTests.js
+++ b/reviewboard/static/rb/js/views/tests/commentDialogViewTests.js
@@ -519,5 +519,31 @@ describe('views/CommentDialogView', function() {
                 });
             });
         });
+
+        describe('Logged Out indicator', function() {
+            it('When logged in', function() {
+                RB.UserSession.instance.set('authenticated', true);
+
+                dlg = new RB.CommentDialogView({
+                    animate: false,
+                    model: new RB.CommentEditor()
+                });
+                dlg.render();
+
+                expect(dlg.$el.find('p[class="login-text"]').length).toBe(0);
+            });
+
+            it('When logged out', function() {
+                RB.UserSession.instance.set('authenticated', false);
+
+                dlg = new RB.CommentDialogView({
+                    animate: false,
+                    model: new RB.CommentEditor()
+                });
+                dlg.render();
+
+                expect(dlg.$el.find('p[class="login-text"]').length).toBe(1);
+            });
+        });
     });
 });
diff --git a/reviewboard/templates/base.html b/reviewboard/templates/base.html
index d9b138ad4aef589b023d8614b15d0d566536f93e..97a63efd46130ffb1fe0451090fdd0c79267daf2 100644
--- a/reviewboard/templates/base.html
+++ b/reviewboard/templates/base.html
@@ -161,7 +161,8 @@
         watchedReviewGroupsURL: "{% url watched-review-groups-resource request.user %}",
         watchedReviewRequestsURL: "{% url watched-review-requests-resource request.user %}"
 {% else %}
-        authenticated: false
+        authenticated: false,
+        loginURL: "{% url login %}"
 {% endif %}
     });
   </script>
diff --git a/reviewboard/templates/js/tests.html b/reviewboard/templates/js/tests.html
index 16d2a917bfff21d01cc2f983af1b6b83e81387ff..a7d98df3baf2b37e790c3e244bb6eb6b063e0599 100644
--- a/reviewboard/templates/js/tests.html
+++ b/reviewboard/templates/js/tests.html
@@ -20,8 +20,6 @@
 {% endblock %}
 
 {% block scripts-post %}
-{%  include "reviews/comments_dlg.html" %}
-
 {%  compressed_js "reviews" %}
 {%  compressed_js "js-tests" %}
 
diff --git a/reviewboard/templates/reviews/comments_dlg.html b/reviewboard/templates/reviews/comments_dlg.html
deleted file mode 100644
index 11b66517b052194410c51939ca823ce5981b4063..0000000000000000000000000000000000000000
--- a/reviewboard/templates/reviews/comments_dlg.html
+++ /dev/null
@@ -1,28 +0,0 @@
-{% load i18n %}
-<script id="comment-dlg-template" type="text/template">
- <div class="other-comments">
-  <h1 class="title">{% trans "Other reviews" %}</h1>
-  <ul></ul>
- </div>
- <form method="post">
-  <h1 class="title">{% trans "Your comment" %}</h1>
-{% if not request.user.is_authenticated %}
-{%  url login as login_url %}
-  <p>
-   {% blocktrans %}You must <a href="{{login_url}}">log in</a> to post
-   a comment.{% endblocktrans %}
-  </p>
-{% endif %}
-  <textarea name="text" rows="6" cols="30"></textarea>
-  <div class="comment-issue-options">
-   <input type="checkbox" name="comment_issue" />
-   <label for="comment_issue">{% trans "Open an <u>i</u>ssue" %}</label>
-  </div>
-  <div class="status"></div>
-  <div class="buttons">
-   <input type="button" class="save" value="{% trans "Save" %}" disabled="true" />
-   <input type="button" class="cancel" value="{% trans "Cancel" %}" />
-   <input type="button" class="delete" value="{% trans "Delete" %}" disabled="true" />
-  </div>
- </form>
-</script>
diff --git a/reviewboard/templates/reviews/reviewable_base.html b/reviewboard/templates/reviews/reviewable_base.html
index dd2517565da2443049383fe0c8953063d688f982..f975ead7fcc0e7147989c94a7242036876b2d55a 100644
--- a/reviewboard/templates/reviews/reviewable_base.html
+++ b/reviewboard/templates/reviews/reviewable_base.html
@@ -27,6 +27,4 @@
  </div>
 </div>
 {%  endblock %}
-
-{%  include "reviews/comments_dlg.html" %}
 {% endblock %}
